Skip to content

CMake 使用 FetchContent 时,不能直接 target_link_libraries #2375

@laiall

Description

@laiall

RapidJSON 的情况:

RapidJSON CMakeLists.txt 第198行

target_include_directories(RapidJSON INTERFACE $<INSTALL_INTERFACE:include>)
只有 INSTALL_INTERFACE,没有 BUILD_INTERFACE。
当通过 FetchContent 使用时:

  • 库是本地编译,不会被 "install"
  • 所以 INSTALL_INTERFACE 永远不会生效
  • BUILD_INTERFACE 缺失导致编译时找不到头文件

对比 CLI11 的写法:

CLI11 CMakeLists.txt 第53-55行

target_include_directories(
CLI11 ${PUBLIC_OR_INTERFACE}
$&lt;BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> # ← 有 BUILD_INTERFACE
$<INSTALL_INTERFACE:include>)

这时候 CLI11 可以 target_link_libraries(... CLI11::CLI11) 正常工作,而 RapidJSON 不行的原因。

RapidJSON 得使用 target_include_directories(... PRIVATE ${rapidjson_SOURCE_DIR}/include) 来进行。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions