cmake在安装期间排除可执行文件

时间:2012-11-14 15:25:02

标签: cmake

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

可执行文件是一个单元测试,最终将使用add_test进行处理,但是现在我只想尽可能少地删除测试二进制文件。

由于

2 个答案:

答案 0 :(得分:4)

如果您将install功能应用于CMake,CMake只会安装一个可执行目标,即:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin")

要阻止为ExecutableTest版本安装Release,请添加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)

答案 1 :(得分:3)

由于EXCLUDE_FROM_ALL有undefined behavior if combined with 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)可能会not work

所以,你use an adequate workaround,或者你打电话

make all_but_tests && make install

每次您要安装“all_but_tests”