cmake 禁用FetchContent的安装

enyaitl3  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(264)

假设我有以下代码:

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的包安装文件吗?

juud5qan

juud5qan1#

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()

(This实际上是FetchContent documentation中提到的FetchContent_GetProperties调用的确切替代方法,但具有额外的EXCLUDE_FROM_ALL参数。)

相关问题