2012-06-14 7 views
1

내 프로젝트 디렉토리에 CMakeLists.txt 파일과 srcinclude 디렉토리가 루트에 있습니다. src에는 자체 루트 도 포함되어 있습니다. src/CMakeLists.txt의 문법이 다음에 가까울 수 있도록 CMake가 기본 전역 빌드 디렉토리를 설정하도록 지정할 수있는 방법이 있습니까?`src` 디렉토리에있는 소스를`bin` 디렉토리의 CMake로 바이너리로 컴파일

include_directories(include) 
add_executable(first main.cpp foo.cpp) 
add_executable(second bar.cpp) 

나는이 디렉토리 트리를 싶습니다 건설 될 :

CMakeLists.txt 

src/ 
    CMakeLists.txt 
    main.cpp 
    foo.cpp 
    bar.cpp 

include/ 
    ... 

bin/ (or build/) 
    first 
    second 

답변

5

당신은 CMAKE_RUNTIME_OUTPUT_DIRECTORY을 설정할 수 있습니다 :

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) 

그러나이 각각 다른 대상에 대한 bin/ 내부의 하위 디렉토리를 생성하지 않습니다 .

function(my_add_executable TargetName) 
    set(Files ${ARGV}) 
    list(REMOVE_AT Files 0) 
    add_executable(${TargetName} ${Files}) 
    set_target_properties(${TargetName} PROPERTIES 
          RUNTIME_OUTPUT_DIRECTORY 
           "${CMAKE_SOURCE_DIR}/bin/${TargetName}") 
endfunction() 

단순히로 통화를 변경합니다 : 당신이 것을 원하는 경우

, 당신은 add_subdirectories을 래핑하는 도우미 함수를 만들 수 있습니다, 자세한 내용은

my_add_executable(first main.cpp foo.cpp) 
my_add_executable(second bar.cpp) 


실행

cmake --help-variable "CMAKE_RUNTIME_OUTPUT_DIRECTORY" 
cmake --help-property "RUNTIME_OUTPUT_DIRECTORY" 
cmake --help-property "RUNTIME_OUTPUT_DIRECTORY_<CONFIG>" 
+0

완벽하게 작동합니다. 아직 사용하지는 않지만 코드베이스가 커지고 단일 폴더에서 바이너리가 더 복잡해지면 실행 파일 당 디렉토리 방법이 좋은 아이디어입니다. 또한, 나는'cmake' 프로그램 자체에서 참조 기능을 사용할 수 있다는 것을 알지 못했습니다. (오늘 회신했음을 기억하지만 메시지가 표시되지 않습니다. 이중 게시물 인 경우 사과드립니다.) – Vortico

관련 문제