2012-06-14 59 views
1

我的項目目錄包含一個CMakeLists.txt文件和srcinclude目錄。 src也包含它自己的CMakeLists.txt,它由一個根在鏈接。有沒有一種方法可以指定CMake來設置一個默認的全局構建目錄,以使src/CMakeLists.txt中的語法接近以下內容?將`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/創建子目錄對於每個不同的目標。

如果你想,你可以創建一個輔助函數來包裝add_subdirectories

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() 

然後簡單地改變你的來電:

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

相關問題