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

bob*_*bah 5 cmake

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

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

谢谢

Ant*_*nio 6

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

你应该:

然后(假设您正在使用 make,但也适用于 ninja):

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

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

    make my_tests && make install

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

    make [all] && make install

我被这个问题吸引了,因为我最近不得不面对一个类似的问题:只安装一个目标及其依赖项

编辑:

add_dependency(install all_but_tests)可能不会工作

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

make all_but_tests && make install

每次你想安装“all_but_tests”


sak*_*kra 5

CMake仅在将install功能应用到可执行目标后才安装该可执行目标,即:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin")
Run Code Online (Sandbox Code Playgroud)

为了防止在安装ExecutableTestRelease构建,增加CONFIGURATIONS限制:

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" CONFIGURATIONS Debug)
Run Code Online (Sandbox Code Playgroud)

另外,您可以创建ExecutableTest一个可选目标,默认情况下未构建该目标:

add_executable(ExecutableTest EXCLUDE_FROM_ALL ${ExecutableTestFiles})
Run Code Online (Sandbox Code Playgroud)

然后选择是否仅安装(ExecutableTest如果已明确构建):

 install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" OPTIONAL)
Run Code Online (Sandbox Code Playgroud)

可以将所有可选的测试目标合并到一个超级目标中,以允许一步构建它们:

add_custom_target(MyTests DEPENDS ExecutableTest ExecutableTest2 ExecutableTest3)
Run Code Online (Sandbox Code Playgroud)