2012-02-19 178 views
11

我有一個非常簡單的目錄結構:CMake的可執行文件的位置

Project 
Project/src 
Project/build 

源文件都在Project/src,我在做Project/build外的SRC構建。在運行cmake ../ ; make後,我可以這樣運行可執行文件:Project/build$ src/Executable - 即Executablebuild/src目錄中創建。

如何在CMakeLists.txt文件中設置可執行文件的位置?我試圖按照cmake.org中的一些示例進行操作,但工作的鏈接似乎沒有顯示出這種行爲。我的Project/src/CMakeLists.txt文件在這裏列出。


include_directories(${SBSProject_SOURCE_DIR}/src) 
link_directories(${SBSProject_BINARY_DIR}/src) 

set (SBSProject_SOURCES 
    main.cpp 
    ) 

add_executable(TIOBlobs ${SBSProject_SOURCES}) 

而且頂級Project/CMakeLists.txt


cmake_minimum_required (VERSION 2.6) 
project (SBSProject) 

set (CMAKE_CXX_FLAGS "-g3 -Wall -O0") 

add_subdirectory(src) 

回答

16

你有一對夫婦的選擇。

要更改可執行文件的默認位置,請將CMAKE_RUNTIME_OUTPUT_DIRECTORY設置爲所需的位置。例如,如果您添加

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 

Project/CMakeLists.txtadd_subdirectory命令,你的可執行文件將在Project/build結束了在Unix構建或build/<config type>爲Win32版本。欲知詳情,請運行:

cmake --help-property RUNTIME_OUTPUT_DIRECTORY 

這種規模的項目另一種選擇是隻有一個的CMakeLists.txt。您可以或多或少的將add_subdirectory(src)替換爲Project/src/CMakeLists.txt的內容以實現相同的輸出路徑。

但是,還有幾個問題。

您可能希望避免通常使用link_directories。有關說明,運行

cmake --help-command link_directories 

即使你使用link_directories,這是不可能的,任何圖書館將在${SBSProject_BINARY_DIR}/src

的另一個問題是,CMAKE_CXX_FLAGS適用於Unix的構建中找到,所以也許應該被包裹在一個if (UNIX) ... endif()塊。當然,如果你不打算構建Unix以外的任何其他應用程序,這是一個非問題。

最後,我建議你要求的CMake 2.8作爲最低限度,除非你必須使用2.6 - CMake的是一種積極開發項目,目前的版本有超過2.6

所以一個替代Project/CMakeLists.txt許多顯著的改進可能看起來像:

cmake_minimum_required (VERSION 2.8) 
project (SBSProject) 

if (UNIX) 
    set (CMAKE_CXX_FLAGS "-g3 -Wall -O0") 
endif() 

include_directories (${SBSProject_SOURCE_DIR}/src) 

set (SBSProject_SOURCES 
    ${SBSProject_SOURCE_DIR}/src/main.cpp 
    ) 

add_executable (TIOBlobs ${SBSProject_SOURCES}) 
2

搬遷的可執行文件位置的另一種方式是通過set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)

相關問題