【问题标题】:cannot change cmake executable output directory on windows无法在 Windows 上更改 cmake 可执行文件输出目录
【发布时间】:2015-09-22 13:31:37
【问题描述】:

我有一个在 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 文件中指定的可执行文件会生成在所需的目录中,但如果这是偶然的,我真的不能说。

【问题讨论】:

  • 你确定你没有在某处使用set_target_properties (<target> PROPERTIES PREFIX "../") 或类似的东西吗?默认输出目录../x64 看起来很奇怪。 (这是您的输出目录somedir/modules/x64/ 相对于CMakeLists.txt 位置somedir/modules/MyModules)。
  • 是不是和你调用 ADD_EXECUTABLE 和 ADD_TEST 的目标名称一样?
  • 如果你尝试类似:ADD_TEST(NAME MyTestName COMMAND MyTest)
  • @Tsyvarev 整个项目中唯一的另一个set_target_properties 是:set_target_properties(${ITK} PROPERTIES MAP_INPORTED_CONFIG_RELWITHDEBUGINFO RELEASE)(不知道它是做什么的,那是我没有写的代码),也没有在任何地方设置 PREFIX跨度>
  • @RenépaulDebroize 我认为add_executableadd_test 都是必需的,并且以这种方式 - 一个是创建可执行文件,另一个是添加生成的可执行文件作为测试 - 这是错误的吗?不幸的是,将 name/command 添加到 add_test 并没有改变任何东西。

标签: c++ windows cmake


【解决方案1】:

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

因此,设置了例如 CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG 配置特定变量使得该变量可用于 Debug 配置,即使 RUNTIME_OUTPUT_DIRECTORY 属性已明确设置。在这种情况下重新定义输出目录的唯一方法是设置RUNTIME_OUTPUT_DIRECTORY_DEBUG config-specific 属性。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多