有条件地排除 CMake 中已安装的文件

Conditional exclusion of installed file in CMake

如果满足条件,我需要在CMake中安装目录时排除一个文件。所以我需要这样的东西:

install(
    DIRECTORY include
    COMPONENT dev
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    PATTERN $<$<NOT:$<STREQUAL:${MY_VAR},SOME_VALUE>>:my_header.h> EXCLUDE
)

但不幸的是它不起作用

生成器表达式在 install() 规则中不可用。但是由于您的实际上并不依赖于任何生成器时间信息,无论如何,您可以使用 CMake 的参数扩展来完成此操作。

if (MY_VAR STREQUAL "SOME_VALUE")
    set(exclusion_patterns "")
else ()
    set(exclusion_patterns PATTERN my_header.h EXCLUDE)
endif ()

install(
    DIRECTORY include
    COMPONENT dev
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    ${exclusion_patterns}
)