2012-10-14 6 views
1

나는 이것에 관해 많은 것을 찾을 수 없을 것 같아서 어쩌면 가능하지 않을 수도 있습니다 ... 아니면 잘못된 키워드로 검색하고 있습니다.CMake, 빌드 옵션

어쨌든, 나는 출처의 전화 번호부가있다. Source 내에 Tests라는 폴더와 Product라고하는 폴더가 있다고 가정 해 보겠습니다. CMakeLists.txt 파일의 일반적인 계층 구조를 가지고 있으므로 각 디렉토리와 하위 디렉토리에 모든 소스를 빌드 할 수 있습니다. cmake를 사용하여 명령 행 인수를 전달할 수 있는지 알고 싶습니다. 테스트 폴더 나 소스 폴더 만 빌드하십시오.

cmake 테스트 같은 ..

감사합니다 당신이 플래그를 사용할 수 있습니다 물론

답변

3

. 이 같은

if(TEST) 
include needed folders 
else() 
do something else 
endif() 

그리고 전화 cmake :

cmake -DTEST=1 .. 
+0

예. 고맙습니다. – Jomnipotent17

2

당신은 그들에게 서로 다른 목표를 만들 수 있습니다. CMake는 그것들 모두를 설정하지만, make test 또는 make product을 실행할 수 있습니다. 예를 들면 다음과 같습니다.

project(myProject) 

add_subdirectory(tests) 
add_subdirectory(products) 

add_executable(test EXCLUDE_FROM_ALL ${TEST_SRC_FILES}) 
add_executable(product EXCLUDE_FROM_ALL ${PRODUCT_SRC_FILES}) 

각 하위 디렉토리에는 소스 파일 변수를 만드는 CMakeLists.txt가 있습니다. EXCLUDE_FROM_ALL은 단지 make을 입력해도 테스트 또는 제품을 만들지는 않지만 테스트를 수행할지 또는 제품을 원하지 않는지 결정할 수 있음을 의미합니다.

빌드하려면 make test 또는 make product을 수행하면 해당 대상 (및 모든 종속성) 만 빌드됩니다.

+0

이것도 작동합니다. 고맙습니다! – Jomnipotent17

+0

질문이 있습니다. 테스트 및 제품 하위 디렉토리에 하나 이상의 프로젝트가있는 경우 어떻게 변경됩니까? 즉, test1과 test2는 각각 실행 파일을 생성합니다. – Jomnipotent17

+0

그러면 각 실행 파일마다 하나씩 더 많은'add_executable' 라인이 필요합니다. 그래서 당신은 서브 디렉토리에'TEST1_SRC_FILES','TEST2_SRC_FILES' 등을 정의 할 것입니다. 이 접근 방법의 장점은 모든 것이 구성되어 준비가되어 있으므로 CMake를 다시 실행하지 않고도 테스트를 작성/실행하고 최종 코드를 작성할 수 있다는 것입니다. – tpg2114