CMake可执行位置

sim*_*ont 15 cmake

我有一个非常简单的目录结构:

Project
Project/src
Project/build
Run Code Online (Sandbox Code Playgroud)

源文件在Project/src,我做了src外的内置Project/build.运行后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})
Run Code Online (Sandbox Code Playgroud)

而顶级Project/CMakeLists.txt:


cmake_minimum_required (VERSION 2.6)
project (SBSProject)

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

add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)

Fra*_*ser 21

你有几个选择.

要更改可执行文件的默认位置,请设置CMAKE_RUNTIME_OUTPUT_DIRECTORY为所需位置.例如,如果添加

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

Project/CMakeLists.txt 之前add_subdirectory命令,你的可执行文件将在结束了Project/build对Unix的构建或build/<config type>为Win32版本.有关详细信息,请运行:

cmake --help-property RUNTIME_OUTPUT_DIRECTORY
Run Code Online (Sandbox Code Playgroud)

这个大小的项目的另一个选择是只有一个CMakeLists.txt.您可以或多或少地替换add_subdirectory(src)内容Project/src/CMakeLists.txt以实现相同的输出路径.

但是,还有一些问题.

你可能想避免link_directories普遍使用.要解释一下,请运行

cmake --help-command link_directories
Run Code Online (Sandbox Code Playgroud)

即使您使用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})
Run Code Online (Sandbox Code Playgroud)


fee*_*ree 6

重新定位可执行文件位置的另一种方法是通过 set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)


Ped*_*nte 6

Win32 构建的 build/'config type'。

对于 MSVC,避免默认创建的“/Debug”文件夹

set_target_properties(my_target
PROPERTIES 
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)