Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Let's say I have the following code:

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)

That works correctly, but whenever I run make install, it also installs all the cmark files (like include/cmark_version.h, lib/pkgconfig/libcmark.pc, etc).

Is there any way to disable installing files from packages with FetchContent?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
989 views
Welcome To Ask or Share your Answers For Others

1 Answer

The macro FetchContent_MakeAvailable includes subproject with use of add_subdirectory command. And this command has as special option - EXCLUDE_FROM_ALL - for disable inner install calls.

So, you may replace call FetchContent_MakeAvailable with:

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

(This is actually an exact alternative to FetchContent_GetProperties call noted in the FetchContent documentation but with additional EXCLUDE_FROM_ALL parameter.)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...