[cmake-developers] [Review Request] Topic CMakePackageConfigHelpers_build_tree
Daniele E. Domenichelli
daniele.domenichelli at gmail.com
Tue Jul 22 10:42:57 EDT 2014
On 22/07/14 13:44, Stephen Kelly wrote:
>> Does this mean that if I set the <PACKAGE>_DIR environment variable to
>> the CMAKE_BINARY_DIR of my package, CMake will look into these folders
>> as well?
>
> No, I don't think so. You would have to set it to the exact dir afaik.
Actually I tested it, and CMake actually finds the package both if the
package is using export(PACKAGE) or if the user sets the <PACKAGE>_DIR
or the CMAKE_PREFIX_PATH environment variables, but it does not work
when passing the <PACKAGE>_DIR cmake variable (i.e. cmake
-D<PACKAGE>_DIR=<path>), that needs to be the correct path to the
config files...
Unfortunately that's part of the workflow commonly used here to test
different builds, and I don't think that I'll be allowed to change the
workflow of a quite large team in this way... It is more likely that
I'll have to live with "old-style" config files in the main
CMAKE_BINARY_DIR, with different relative paths compared to the one
installed (or with absolute paths).
Also until now I always had the impression that the config file for the
build tree should be in the CMAKE_BINARY_DIR folder, see for example
http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
where it creates the config file for the build tree in this way:
configure_file(FooBarConfig.cmake.in
"${PROJECT_BINARY_DIR}/FooBarConfig.cmake" @ONLY)
The ultimate solution that I can think about is to have a config file
and a version file in CMAKE_BINARY_DIR that just include the real
config and version files, but that sounds a little bit weird to me,
even though I tested it and it works as expected...
So I could have a config file (either configured, or static) in the
correct relative folder, and generate the fake ones in this way:
file(WRITE
"${CMAKE_BINARY_DIR}/FOOConfig.cmake"
"include(\${CMAKE_CURRENT_LIST_DIR}/<path>/FOOConfig.cmake)\n")
file(WRITE
"${CMAKE_BINARY_DIR}/FOOConfigVersion.cmake"
"include(${CMAKE_CURRENT_LIST_DIR}/<path>/FOOConfigVersion.cmake)\n")
What do you think, would this be an acceptable solution in a "modern
CMake" style?
Cheers,
Daniele
More information about the cmake-developers
mailing list