target_include_directories上的生成器表达式的用例是什么?

我已经在多个地方看到了在定义包含目录时使用生成器表达式的引用,因此您可以在编译和安装期间为包含项定义不同的位置。例如:

# Define headers for this library. PUBLIC headers are used for
# compiling the library,and will be added to consumers' build
# paths.
target_include_directories(lib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
    PRIVATE src)

我正在构建一个库项目,并且由于我使用的是标准路径(静态库为lib/,公共头文件为include/),所以我希望通过设置{{ 1}},并使用简单的CMAKE_INSTALL_PREFIX调用,例如:

install()

我的期望是set(CMAKE_INSTALL_PREFIX "${MY_INSTALL_DIR}") install(TARGETS mylibrary ARCHIVE PUBLIC_HEADERS) 将是两者的默认设置,因此我只是告诉CMake安装此类文件。当然,它不起作用,我需要显式设置库和头文件的目标。

所以问题仍然存在:如果我似乎仍然无法使用DESTINATION,那么开始时生成器表达式的用例是什么?


这是我的示例CMakeLists.txt:

INSTALL_INTERFACE
litongfei1208 回答:target_include_directories上的生成器表达式的用例是什么?

类似于生成器的表达式$<BUILD_INTERFACE>$<INSTALL_INTERFACE>被CMake用来区分事物,对于构建树安装树

在构建项目本身时,使用$<BUILD_INTERFACE>,但不使用$<INSTALL_INTERFACE>

使用install(EXPORT)命令创建导出文件时,$<INSTALL_INTERFACE>中列出的内容将包含在其中,但$<BUILD_INTERFACE>中的内容将不包含在内。

但是使用export命令创建导出文件使用$<BUILD_INTERFACE>,但不使用$<INSTALL_INTERFACE>

未使用其他用于区分构建和安装树的表达式$<BUILD_INTERFACE>$<INSTALL_INTERFACE>

例如$<INSTALL_INTERFACE>不会影响install(TARGETS .. PUBLIC_HEADERS)命令。

本文链接:https://www.f2er.com/3152612.html

大家都在问