无法在Windows上更改cmake可执行输出目录

时间:2015-09-22 13:31:38

标签: c++ windows cmake

我有一个基于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_DIRECTORYMyTest_OUTPUT_DIRECTORY_ReleaseMyTest_OUTPUT_DIRECTORY_Debug,如下所述:https://stackoverflow.com/a/25328001/671366)。在ADD_EXECUTABLE之前或之后进行测试,不会改变任何内容。输出目录在somedir/modules/x64/上保持固定。

我没有想法我需要做什么,甚至是它坚持使用的输出目录来自哪里。有任何想法吗?在哪个时间点输出目录是在cmake中决定的?这与子目录有什么关系?父文件夹CMakeLists.txt文件中指定的可执行文件构建在所需的目录中,但如果只是偶然的话我就不能说了。

1 个答案:

答案 0 :(得分:1)

特定于配置的属性RUNTIME_OUTPUT_DIRECTORY_<CONFIG>优先于普通的RUNTIME_OUTPUT_DIRECTORY。在创建可执行目标时,两种类型的属性都从相应的CMAKE_*变量(如果已设置)初始化。

因此,如果设置了CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG特定于配置的变量,则即使明确设置了Debug属性,也会将此变量用于RUNTIME_OUTPUT_DIRECTORY配置。在这种情况下,重新定义输出目录的唯一方法是设置RUNTIME_OUTPUT_DIRECTORY_DEBUG特定于配置的属性。