나는 간단한 규칙과 접근 방식이 작동하지해야하는 이유를 볼 수 없습니다 : (Main
에 전달로)
rule Application application : infoFile
{
local appDir = $(application:BS=.app) ;
MakeLocate $(appDir) : ... some directory ... ;
Depends $(appDir) : $(application) $(infoFile) ;
Application1 $(appDir) : $(application) $(infoFile) ;
}
actions Application1
{
rm -rf $(1)
mkdir -p $(1)/Contents/MacOS
cp $(2[1]) $(1)/Contents/MacOS
cp $(2[2]) $(1)/Contents/Info.plist
}
첫 번째 인수는 실행 대상 - 규칙은 최종 이름이 가정합니다. 두 번째 인수는 Info.plist의 대상입니다 (이름은 중요하지 않음). 이미 존재하는 파일이라고 생각합니다. 따라서 Jam에게 찾아야합니다. 파일을 가정하면 실행 파일을 빌드 Jamfile의 하위 디렉토리에있는, 즉 Jamfile의 흥미로운 부분은 다음과 같을 수 있습니다 : 당신은 jam -q MyApp.app
빌드 것
Main MyApp : ... ;
local infoFile = [ FGristFiles Info.plist ] ;
SEARCH on $(infoFile) = $(SEARCH_SOURCE) ;
Application MyApp : $(infoFile) ;
. info 파일의 이름이 항상 그와 같으며 해당 하위 디렉토리에있는 경우 해당 코드를 Application 규칙으로 이동하고 호출을 단순화 할 수 있습니다. 또는 한 번만 필요하면 응용 프로그램 규칙에서 모든 코드를 이동하고 작업 만 유지하면됩니다.
또는 작업을 작성하지 않고도 모든 작업을 수행 할 수 있습니다. 당신의 Jamfile에서 : 당신이 jam -q MyApp-dir
을 할 수 있도록
local application = MyApp ;
local infoFile = Info.plist ;
local targetDir = ... some directory ... ;
local applicationDir = [ FDirName $(targetDir) $(application:BS=.app) ] ;
local contentsDir = [ FDirName $(applicationDir) Contents ] ;
local macOsDir = [ FDirName $(contentsDir) MacOS ] ;
Main $(application) : ... ;
MakeLocate $(application) : $(macOsDir) ;
local targetInfoFile = <$(application)-info-plist)>Info.plist ;
MakeLocate $(targetInfoFile) : $(contentsDir) ;
File $(targetInfoFile) : [ FGristFiles $(infoFile) ] ;
NotFile $(application)-dir ;
Depends $(application)-dir : $(application) $(targetInfoFile) ;
의사 대상이 존재합니다. 분명히 코드를 재사용하고 싶다면 코드로 옮길 수 있습니다. application 및 infoFile이 다시 매개 변수가됩니다. File
규칙은 소스 파일의 SEARCH
을 SEARCH_SOURCE
으로 설정하므로 나중에 다른 동작이 필요할 경우 다시 설정해야합니다.
면책 조항 : 위의 코드 중 하나라도 테스트하지 않았으므로 오타 또는 다른 작은 사고는 가능합니다. 그러나 원칙적으로 사물은 윤곽이 잡힌 것처럼 작동해야합니다.
참고 : 'rule Application application : infoFile'은 (는) 잘못된 구문입니다. 단지'rule application'이어야합니다; 인수를 지정하려면 주석을 사용하십시오. – wjk
그러면 Haiku의 Jam (약간 확장 된 Perforce Jam 2.5rc3) 또는 "최근의"Perforce Jam을 사용하지 않는 것 같습니다. 명명 된 규칙 매개 변수는 2002 년에 PERFORCE JAM에서 소개되었습니다. 일부 Linux 배포판 (적어도 openSUSE)은 이전 PERFORCE JAM 버전의 포크 인 Boost Jam과 함께 제공됩니다. 또한 return/break/continue를 지원하지 않습니다 (각각 예기치 않은 의미로만 리턴). – user686249
나는 그것을 몰랐다. – wjk