2012-04-03 3 views
8

Qt 프로젝트를 최근에 qmake에서 CMake으로 이식했습니다. 주 프로그램에 #define 지시어에 의존하는 값이 포함되어 있습니다.CMake에서 변수의 두 가지 다른 값으로 프로그램을 작성하는 방법

CMake을 통해 외부에서 define 지시어를 지정하고 동일한 실행 파일의 3 가지 다른 이름의 버전을 빌드하고자합니다.

어떻게해야합니까?

나는 set_target_properties을 보았지만이 파일은 라이브러리에서만 실행 가능하며 실행 파일에서는 사용할 수 없습니다.

예를 들어 나는 다음과 같은 프로그램이,

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

이가 내가

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 
를 지정하려면 내 CMakeLists.txt에서 예를 들어 BUILDTYPE "define" 에 따라 3 개 가지 맛 (3 개 실행)에서 컴파일되어 있다고합니다

하지만 올바른 구문은 아닙니다. 힌트를 주시겠습니까? 및 인쇄 할 수있는 실행 파일이 3 개 있습니다.

답변

9

set_target_properties가 작동하지 않습니까? 작동 내 컴퓨터에

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=1") 

나 :

add_executable(myAppV1 main.cpp) 
add_executable(myAppV2 main.cpp) 
set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 
set_target_properties(myAppV2 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=2") 
+0

감사합니다. 나는 add_executable 후 set_target_properties를 이동하고 당신이 쓴 두 번째 버전 add_executable (myAppv1 MAIN.CPP) set_target_properties (myAppV1 ​​특성 COMPILE_DEFINITIONS "BUILDTYPE = 1") 하지만이 방법 add_executable (myAppv1에서 사용해야 main.cpp) set_target_properties (myAppV1 ​​PROPERTIES COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

또 다른 방법이 될 수있다 : 하나 이것에 대해 어떻게

mkdir two directory 
buildflavor1 
buildflavor2 

을 제 1 서브에서 디렉토리 실행 :

두 번째 실행에
cmake -DFLAVOR=OPTION1 .. 

:

run cmake -DFLAVOR=OPTION2 .. 

그래서 서로 다른 컴파일 플래그와 같은 이름의 실행 파일이 등등 자신의 기능 .o하고있다.

관련 문제