CMake可执行位置

时间:2012-02-19 01:21:35

标签: 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)

3 个答案:

答案 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})