`CPMAddPackage` does not `export` variables when finding local packages.
At first, I used CPMFindPackage to add third-party dependencies, because I wanted CPM to first find out if there was a package that needed to be installed locally, and then download and install it if there wasn't.
But then I noticed that CPMFindPackage does not export variables if it finds a locally installed package.
Then I noticed that if I use CPMAddPackage and define CPM_USE_LOCAL_PACKAGES I can also achieve the same function and export the variables after it finds the locally installed packages.
The problem is that I can't use the exported variables even though the logs output using local package.
My CMake code is roughly like this:
CPMAddPackage(
NAME CURL
GIT_TAG curl-7_87_0
GITHUB_REPOSITORY "curl/curl"
OPTIONS "CURL_USE_OPENSSL"
)
# set(linked_project CURL)
if (${linked_project}_ADDED)
# downloaded
message(STATUS "Successfully added [${linked_project}], the source files path is [${${linked_project}_SOURCE_DIR}], the binary files path is [${${linked_project}_BINARY_DIR}]!")
# add_subdirectory(
# ${${linked_project}_SOURCE_DIR}
# ${${linked_project}_BINARY_DIR}
# EXCLUDE_FROM_ALL
# )
else ()
message(FATAL_ERROR "Library [${linked_project}] not found!")
endif (${linked_project}_ADDED)
Everything works fine on Windows and Linux, but not on MacOS. I don't have a MacOS environment to test in, so I'm relying on GitHub Workflows.
If the local package is found, find_project() set ${linked_project}_FOUND and ${linked_project}_DIR, or not?
IMHO, that is right, because the other variables are related to CPM.cmake but only if the git repo was cloned -> added.