我目前正在构建一个带有插件结构的项目。我正在使用CMake编译项目。插件在不同的目录中编译。我的问题是CMake在源的目录结构中编译并保存二进制文件和插件,动态库。如何使CMake将文件保存在 ./ bin 目录中?
答案 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]
附加到变量/属性名称,以使输出目录适用于特定配置(配置的标准值为DEBUG
,RELEASE
,{ {1}}和MINSIZEREL
)。
答案 1 :(得分:25)
使用set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")
答案 2 :(得分:7)
使用EXECUTABLE_OUTPUT_PATH
CMake变量设置所需的路径。有关详细信息,请参阅在线CMake文档:
答案 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 )