我有一个非常简单的目录结构:
Project
Project/src
Project/build
源文件位于Project/src
,我在Project/build
中进行了src之外的构建。运行cmake ../ ; make
后,我可以运行可执行文件:Project/build$ src/Executable
- 也就是说,Executable
在build/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)
答案 0 :(得分:19)
你有几个选择。
要更改可执行文件的默认位置,请将CMAKE_RUNTIME_OUTPUT_DIRECTORY
设置为所需位置。例如,如果添加
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
在<{1}}命令之前Project/CMakeLists.txt
>>,您的可执行文件将在add_subdirectory
用于Unix版本或Project/build
用于Win32版本。有关详细信息,请运行:
build/<config type>
此大小的项目的另一个选项是只有一个CMakeLists.txt。您可以或多或少地使用cmake --help-property RUNTIME_OUTPUT_DIRECTORY
的内容替换add_subdirectory(src)
以实现相同的输出路径。
然而,还有一些问题。
您可能希望避免一般使用Project/src/CMakeLists.txt
。有关说明,请运行
link_directories
即使您使用cmake --help-command link_directories
,也不太可能在link_directories
另一个问题是${SBSProject_BINARY_DIR}/src
适用于Unix版本,所以应该包含在CMAKE_CXX_FLAGS
块中。当然,如果你不打算在除Unix以外的任何东西上构建,那么这不是问题。
最后,我建议至少要求使用CMake 2.8,除非你必须使用2.6 - CMake是一个积极开发的项目,当前版本在2.6以上有很多重大改进
if (UNIX) ... endif()
的单一替代品可能如下所示:
Project/CMakeLists.txt
答案 1 :(得分:2)
重定位可执行文件位置的另一种方法是通过set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)
答案 2 :(得分:0)
用于Win32构建的构建/'配置类型'。
对于MSVC,请避免创建默认的“ / Debug”文件夹
set_target_properties(my_target
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR})