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