2012-08-29 2 views
4

동일한 소스 파일을 빌드하는 두 개의 프로젝트가 있고, 두 번째 프로젝트에는 작은 하위 세트가 있고, 몇 가지 다른 정의 및 빌드 플래그가 있습니다.하나의 CMakeLists.txt에 여러 CMake 프로젝트가 있습니다.

나는 이런 식으로 뭔가하려고 할 때 :

SET (this_target PROJECT1) 
PROJECT(${this_target}) 

... 

ADD_EXECUTABLE(#{this_target} ...) 

SET (this_target PROJECT2) 
PROJECT(${this_target}) 

... 

add_definitions (-DMYDEFINE) 
TARGET_LINK_LIBRARIES(${this_target} -myflag) 

ADD_EXECUTABLE(#{this_target} ...) 

그것은 적어도 비주얼 스튜디오 2010, 겉으로는 적절한 소스 파일 등으로, 두 개의 프로젝트를 생성 끝,하지만 몇 가지 이유를 들어, 두 프로젝트가 보인다 MYDEFINE을 정의하고 myflag를 링커 플래그로 가져옵니다.

파일에 대해 작동하는 것처럼 보이지만 플래그가 아닌 이유는 확실하지 않습니다.

+3

하나의 CMakeList.txt 파일에 두 개 이상의 PROJECT()가 있어야합니다. – drescherjm

+0

CMakeLists.txt 파일만으로 거의 빈 디렉토리를 별도로 만들 수있는 다른 방법이 있습니까? – Arelius

+0

일반적으로 각 대상을 자체 폴더에 넣지 만 두 번째 PROJECT()를 제거하고 두 번째 대상에서 사용 된 변수 이름을 this_target이 아닌 다른 이름으로 변경할 수 있습니다. – drescherjm

답변

5

첫째, 실행 파일에 다른 이름을 사용해야합니다. 특정 대상을 대상에 추가하려면 set_target_properties를 사용하면 각 대상에 고유 한 속성 (예 : 컴파일 정의)이 있습니다. 당신이 플래그를 연결 오버라이드 (override) 할 경우

# compile and link first app 
add_executable(prg1 ${CommonSources} ${Prg1SpecificSources}) 
target_link_libraries(prg1 lib1 lib2 lib3) 

#set target-specific options 
set_target_properties(prg1 PROPERTIES COMPILE_DEFINITIONS "FOO=BAR1") 

#... 

# compile and link second app 
add_executable(prg2 ${CommonSources} ${Prg2SpecificSources}) 
target_link_libraries(prg2 lib1 lib2 lib3) 
#set target-specific options 
set_target_properties(prg1 PROPERTIES COMPILE_DEFINITIONS "FOO=BAR2") 

, 당신은 set_target_properties에게와 LINK_FLAGS을 사용할 수 있습니다

1

나는 1 CMakeLists.txt에서 여러 목표를 두는 것은 비주얼 스튜디오 2010 간헐적 인 빌드 오류가 발생합니다 것으로 나타났습니다 , 충돌 액세스로 인해 generate.stamp (비록 내가 배제 할 수없는 뭔가 잘못하고 있어요). 따라서 대상을 다른 CMakeLists.txt 파일에 저장하거나 다른 해결 방법을 찾아야 할 수도 있습니다.

관련 문제