禁用 FetchContent 安装

Ale*_*haw 11 cmake

假设我有以下代码:

include(FetchContent)
FetchContent_Declare(cmark
  GIT_REPOSITORY https://github.com/commonmark/cmark.git
  GIT_TAG        0.29.0
)
FetchContent_MakeAvailable(cmark)

target_link_libraries(hello_world cmark::cmark_static)
install(TARGETS hello_world DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但每当我运行时make install,它也会安装所有 cmark 文件(如include/cmark_version.hlib/pkgconfig/libcmark.pc等)。

有没有办法禁止使用 FetchContent 从包中安装文件?

Tsy*_*rev 14

该宏FetchContent_MakeAvailable包括使用add_subdirectory命令的子项目。该命令有一个特殊选项 - EXCLUDE_FROM_ALL- 用于禁用内部install调用。

因此,您可以将 call 替换FetchContent_MakeAvailable为:

FetchContent_GetProperties(cmark)
if(NOT cmark_POPULATED)
  FetchContent_Populate(cmark)
  add_subdirectory(${cmark_SOURCE_DIR} ${cmark_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
Run Code Online (Sandbox Code Playgroud)

(这实际上是FetchContent 文档FetchContent_GetProperties中提到的调用的精确替代方案,但带有附加参数。)EXCLUDE_FROM_ALL