假设我有以下代码:
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.h
、lib/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
参数。(