8

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?

starball
  • 20,030
  • 7
  • 43
  • 238
Alex Shaw
  • 163
  • 1
  • 7

1 Answers1

12

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

Tsyvarev
  • 60,011
  • 17
  • 110
  • 153
  • 1
    You can move to Fetch stuff to a subdirectory and include this with EXCLUDE_FROM_ALL. This way you can keep using FetchContent_MakeAvailable. – Benjamin Buch Jun 22 '22 at 19:20