I have multiple static libraries created in house that get linked into an image.
I want to use an external library that gets retrieved by using FetchContent_Declare.
proj
/lib1
CMakeList.txt
/lib2
CMakeList.txt
/exe
CMakeList.txt
/external
CMakeList.txt (FetchContent_Declare)
/build
/deps
/externallib1 (auto generated)
CMakeList.txt
I would like to use the following in /proj/CMakeList:
include_directories(externallib1/include)
But I don't know how to figure out the directory where the external library was actually downloaded?
The FetchContent module provides primary two approaches for populating the content of the external package in your main CMake build:
FetchContent_MakeAvailable: The simpler, and often preferred approachFetchContent_GetProperties and FetchContent_Populate: An approach offering more precise control, allowing custom variables/policiesWhichever approach you use, the <lcname>_SOURCE_DIR variable for the package should be defined, which points to the top-level source directory of the download external package. In this case, <lcname> is the lower-case name of the package provided to one of the above commands.
CMake typically downloads the external package into your build directory here:
${CMAKE_BINARY_DIR}/_deps/<package-name>-src
but you can use the aforementioned <lcname>_SOURCE_DIR variable to reference this location.
For example, with googletest, one simple usage might look like this:
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.8.0
)
FetchContent_MakeAvailable(googletest)
Consequently, the googletest_SOURCE_DIR variable will point to the top-level source directory of the downloaded googletest repository, and you can include the googletest headers using something like the following:
include_directories(${googletest_SOURCE_DIR}/googletest/include/gtest)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With