我有一个基于Linux和Windows的项目。
在那里,我在一个子文件夹somedir/modules/MyModule
中有一个CMakeLists.txt,它应该添加一些测试可执行文件。 cmake希望将它们放在某个子目录二进制文件夹中,但我想将它们放在${CMAKE_BINARY_DIR}/x64
所以我正在做的就是这个(在somedir/modules/MyModules
目录中的CMakeLists.txt中):
ADD_EXECUTABLE(MyTest MyTest.cpp)
set_target_properties(MyTest PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/x64")
TARGET_LINK_LIBRARIES(MyTest SomeLibraries...)
ADD_TEST(MyTest ${CMAKE_BINARY_DIR}/x64/MyTest)
在Linux下这很好用,但在Windows下我根本无法将其构建到${CMAKE_BINARY_DIR}/x64
文件夹中。我已通过MESSAGE
进行了检查,${CMAKE_BINARY_DIR}/x64
确实指向了正确的文件夹。我还尝试更改CMAKE_RUNTIME_OUTPUT_DIRECTORY
(甚至是每个目标变量,例如CMAKE_MyTest_OUTPUT_DIRECTORY
,MyTest_OUTPUT_DIRECTORY_Release
,MyTest_OUTPUT_DIRECTORY_Debug
,如下所述:https://stackoverflow.com/a/25328001/671366)。在ADD_EXECUTABLE
之前或之后进行测试,不会改变任何内容。输出目录在somedir/modules/x64/
上保持固定。
我没有想法我需要做什么,甚至是它坚持使用的输出目录来自哪里。有任何想法吗?在哪个时间点输出目录是在cmake中决定的?这与子目录有什么关系?父文件夹CMakeLists.txt文件中指定的可执行文件构建在所需的目录中,但如果只是偶然的话我就不能说了。
答案 0 :(得分:1)
特定于配置的属性RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
优先于普通的RUNTIME_OUTPUT_DIRECTORY
。在创建可执行目标时,两种类型的属性都从相应的CMAKE_*
变量(如果已设置)初始化。
因此,如果设置了CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG
特定于配置的变量,则即使明确设置了Debug
属性,也会将此变量用于RUNTIME_OUTPUT_DIRECTORY
配置。在这种情况下,重新定义输出目录的唯一方法是设置RUNTIME_OUTPUT_DIRECTORY_DEBUG
特定于配置的属性。