如何配置/ hack cmake来构建使用add_executable()添加的特定可执行文件但不安装它?
可执行文件是一个单元测试,最终将使用add_test进行处理,但是现在我只想尽可能少地删除测试二进制文件。
由于
答案 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并不重要),保证工作的解决方案会更复杂。
你应该:
Remove dependency of "install" target to "all" target(曾在主CMakeLists.txt中):
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true)
将OPTIONAL添加到测试库中的INSTALL语句中。请注意我报告的here
单独收集要包含在自定义“all_but_tests”中的所有目标 CMake add_custom_target depending on whole project being built(最困难的一步)
创建custom all_but_tests target:
add_custom_target(all_but_tests DEPENDS <<list of targets>>)
将目标安装的依赖关系添加到all_but_tests
add_dependency(install all_but_tests)
(对不起,我从未尝试过,欢迎提供反馈)
add_custom_target(my_tests DEPENDS <<list of tests>>)
然后(假设您正在使用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”