> On Aug 25, 2017, at 11:21 AM, Robert Dailey <rcdailey.li...@gmail.com> wrote:
> 
> So I've been studying the find_package[1] and "creating packages"[2]
> documentation, as well as the CMakePackageConfigHelpers[3] page.
> 
> Based on the current offerings of configuration packages, I do not
> understand the need for the relocatable config.cmake file when all it
> really contains is:
> 
> include(${CMAKE_CURRENT_LIST_DIR}/foo-config.cmake)

In general, if the library does not have any dependencies, you can just export 
the targets directly to the config.cmake file:

install(TARGETS foo EXPORT foo-config)
install(EXPORT foo-config DESTINATION lib/cmake/foo)

However, if the library has dependencies, you will need to iterate over them in 
the config.cmake file. That is if `foo` uses zlib, like this:

find_package(ZLIB)
target_link_libraries(foo ZLIB::ZLIB)

Then the foo-config.cmake needs to do this(assuming the export targets are 
written to foo-targets):

include(CMakeFindDependencyMacro)
find_dependency(ZLIB)
include("${CMAKE_CURRENT_LIST_DIR}/foo-targets.cmake”)

The reason for this is that the imported foo target will link against 
ZLIB::ZLIB, but it will not define it. Actually, the generated 
foo-targets.cmake will create an error if ZLIB::ZLIB doesn’t exists, which is 
why `find_dependency(ZLIB)`(which is really just `find_package` underneath) 
needs to be called before including the foo-targets.cmake.

Hopefully that makes sense.

> 
> However, what I'm wondering is even though the import targets should
> contain all information about include directories, libraries, etc,
> should I still define the typical Foo_INCLUDE_DIRS, Foo_LIBRARIES
> variables? Example of what foo-config.cmake would be like:
> 
> include(${CMAKE_CURRENT_LIST_DIR}/foo-config.cmake)
> set( Foo_INCLUDE_DIRS "... path here...." )
> set( Foo_LIBRARIES "List of libraries here...” )

In general, defining relocatable variables like `Foo_INCLUDE_DIRS` was more 
common in with cmake 2.8. With modern cmake using just the imported targets is 
much better then dealing with all those variables and trying to make them 
relocatable.


-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to