【发布时间】: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_DIRECTORY、MyTest_OUTPUT_DIRECTORY_Release、MyTest_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_executable和add_test都是必需的,并且以这种方式 - 一个是创建可执行文件,另一个是添加生成的可执行文件作为测试 - 这是错误的吗?不幸的是,将name/command添加到 add_test 并没有改变任何东西。