5

如何配置/破解 cmake 以构建使用 add_executable() 添加的特定可执行文件但不安装它?

可执行文件是一个单元测试,最终将使用 add_test 处理,但现在我只想从版本中剥离测试二进制文件,尽可能少地接触。

谢谢

4

2 回答 2

7

由于 EXCLUDE_FROM_ALL与 INSTALL 结合使用时具有未定义的行为(cmake 会尝试警告您,是否设置了 OPTIONAL 无关紧要),保证工作的解决方案更加复杂。

你应该:

然后(假设您使用的是 make,但也适用于忍者):

  • 您可以调用make install,它会触发make all_but_tests,并在构建完成后安装。

  • 您可以调用make my_tests, 然后make install, 在这种情况下它将安装所有内容。您可以像这样连接命令

    make my_tests && make install

    或者,因为在这种情况下没有区别:

    make [all] && make install

我被这个问题所吸引是因为我最近不得不面对一个类似的问题:Installing only one target and its dependencies

编辑:

add_dependency(install all_but_tests)可能行不通

因此,要么使用适当的解决方法,要么调用

make all_but_tests && make install

每次你想安装“all_but_tests”

于 2013-06-19T21:57:56.723 回答
6

如果您将函数应用到它,CMake 只会安装一个可执行目标install,即:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin")

要防止安装ExecutableTestforRelease构建,请添加CONFIGURATIONS限制:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" CONFIGURATIONS Debug)

或者,您可以创建ExecutableTest一个默认不构建的可选目标:

add_executable(ExecutableTest EXCLUDE_FROM_ALL ${ExecutableTestFiles})

然后可选地仅安装ExecutableTest它是否已明确构建:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" OPTIONAL)

所有可选的测试目标都可以集中在一个超级目标中,以便一步构建它们:

add_custom_target(MyTests DEPENDS ExecutableTest ExecutableTest2 ExecutableTest3)
于 2012-11-14T15:48:25.330 回答