2011-10-22 3 views

답변

3

잼 사용에 좋습니다! 나는 그것이 makefiles보다 훨씬 쉽다는 것을 알게 될 것이다.

내가 자주 사용하는 설정에 대해 묻고 있습니다. 최상위 레벨에는 src, inc 및 build라는 세 개의 디렉토리가 있습니다.

# top-level Jamfile 
SubDir . ; 
SubInclude src ; 
SubInclude build ; 

서브 디렉토리 라인은 디렉토리 구조 내에서이 파일의 위치를 ​​설정하고 잼이 작동하는 데 필요한 것 같다 : Jamfile라는 파일도 있습니다. (나는 Jam이 그것을 필요로하지 않도록 설계되었을 수 있다고 생각하지만 거기에있다. 그렇다.) SubInclude 라인은 Jam에게 두 개의 서브 디렉토리를 포함하도록 지시한다. inc 서브 디렉토리는 컴파일 할 필요가있는 것이 없으므로 포함되지 않습니다. 모든 내용은 다른 파일에 포함됩니다. , main.c의

SRC 내
/* header.h */ 
#define MESSAGE "Hello world!" 

, 내가 메인 프로그램의 소스를 가지고 : SRC 내에서 또한

/* main.c */ 
#include "header.h" 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    printf("%s\n", MESSAGE); 
    return 0; 
} 

는 INC 내, 내가 헤더 파일이라고 header.h가있다 다음과 같은 내용을 가진 또 다른 Jamfile입니다 :

# src/Jamfile 
SubDir .. src ; 
HDRS += ../inc ; 
Library helloworld : main.c ; 

SubDir 줄은 디렉토리 구조 내에서 Jamfile을 찾습니다. HDRS 라인은 Jam에게 추가 헤더가있는 곳을 알려줍니다 (시간이 지나면 컴파일러로 전달됩니다). 기존 변수에 덧붙인 + = 연산자를 사용합니다. 라이브러리 라인은 Jam에게 main.c에서 라이브러리를 빌드하도록 지시합니다 (예, main()가있는 라이브러리는 약간 이상하지만 이처럼 작은 프로젝트에서는 OK입니다).

# build/Jamfile 
SubDir .. build ; 
Main helloworld ; 
LinkLibraries helloworld : helloworld ; 
SubInclude .. src ; 

서브 디렉토리 라인은 디렉토리 구조 내에서 Jamfile을 찾습니다 : 빌드 내

는 하나의 Jamfile이다. Main line은 Jam에게 helloworld라는 실행 파일을 빌드하도록 지시합니다. 소스 파일 종속성이 없음에 유의하십시오. 그럴 경우 Main hello world : foo.c ;처럼 보일 것입니다. LinkLibraries 줄은 helloworld 실행 파일을 helloworld라고도 불리는 라이브러리와 연결하도록 Jam에게 알려줍니다. 이 경우에는 실행 파일과 라이브러리가 같은 이름이지만, 실제 프로그램에서는 다른 (더 나은) 이름을 부여 할 수 있습니다. SubInclude 줄은 Jam이 src 디렉토리에서 빌드 할 코드를 더 찾도록 지시합니다. 이것은 실행 파일과 라이브러리 간의 의존성을 해결하는 방법입니다. 이 선은 마지막으로 중요합니다.

이제 빌드 디렉토리로 이동하여 jam 명령을 실행하면 Jam이 src에 helloworld.a 파일을 빌드하고 빌드에서 실행 파일 helloworld에 링크합니다.

src의 모든 코드가 라이브러리로 컴파일되므로 남아있는 .o 파일이 없습니다. 그들은 결국 아카이브 인 .a 파일 안에 저장됩니다. 빌드에 추가 소스 파일 (위의 가상 foo.c처럼)이 있으면 컴파일 후에 .o 파일을 빌드 디렉토리에 남겨 둡니다.

행운을 빈다. Perforce website에서 Jam에 대해 알고있는 사실 대부분을 실험을 통해 배웠습니다.Jam의 주요 PERFORCE 페이지는 here입니다.