禁用FetchContent的安装



假设我有以下代码:

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)

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

有没有什么方法可以禁止使用FetchContent从包中安装文件?

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

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

FetchContent_GetProperties(cmark)
if(NOT cmark_POPULATED)
FetchContent_Populate(cmark)
add_subdirectory(${cmark_SOURCE_DIR} ${cmark_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

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

最新更新