如何将CMake输出变为'bin'目录?

时间:2011-07-06 10:16:30

标签: c++ plugins cmake

我目前正在构建一个带有插件结构的项目。我正在使用CMake编译项目。插件在不同的目录中编译。我的问题是CMake在源的目录结构中编译并保存二进制文件和插件,动态库。如何使CMake将文件保存在 ./ bin 目录中?

9 个答案:

答案 0 :(得分:244)

在Oleg的回答中,我认为要设置的正确变量是CMAKE_RUNTIME_OUTPUT_DIRECTORY。我们在根CMakeLists.txt中使用以下内容:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

您还可以按目标指定输出目录:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

在这两种情况下,您都可以将_[CONFIG]附加到变量/属性名称,以使输出目录适用于特定配置(配置的标准值为DEBUGRELEASE,{ {1}}和MINSIZEREL)。

答案 1 :(得分:25)

使用set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

答案 2 :(得分:7)

使用EXECUTABLE_OUTPUT_PATH CMake变量设置所需的路径。有关详细信息,请参阅在线CMake文档:

CMake 2.8.8 Documentation

答案 3 :(得分:3)

$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)

答案 4 :(得分:2)

对于我来说,我使用的是cmake 3.5,以下(set variable)不起作用:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

但这可行(set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

答案 5 :(得分:1)

cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)

答案 6 :(得分:0)

  

英语不是我的母语;请原谅输入错误。

使用此行配置:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
放置你的任何CMakeLists.txt项目 这个$ {PROJECT_SOURCE_DIR}是您当前项目所在的源目录 如果徘徊为什么是$ {EXECUTABLE_OUTPUT_PATH}
检查此文件CMakeCache.txt,然后搜索关键字output path
这里定义了所有变量,它将给出项目的完整解释setting·

答案 7 :(得分:0)

无论我是在主CMakeLists.txt中定义还是在单个CMakeLists.txt中定义,它仍假定我希望所有路径都远离主路径,这是所有路径中最没有用的假设。

答案 8 :(得分:0)

要添加到此:

如果您正在使用CMAKE生成 Visual Studio 解决方案,并且希望 Visual Studio 将已编译的文件输出到/ bin,则需要修改Peter的答案位:

# set output directories for all builds (Debug, Release, etc.)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
    string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/bin )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )