[CMake] Looking for advice on creating targets that use external packages
L. A. Pritchett-Sheats
lpritch at lanl.gov
Thu Feb 24 12:00:29 EST 2011
I'm working on a software project that requires about a dozen external
packages to build our libraries. What is the correct way to define the
dependencies for our targets that depend on these external libraries?
So far I have created FindXXX.cmake files for each external library. These
files set XXX_INCLUDE_DIRS and XXX_LIBRARY or XXX_LIBRARIES. Should I make
a target in our build for XXX?
Example A:
in the root CMakeLists.txt file:
find_package(UnitTest)
add_library(unittest++ STATIC IMPORTED)
set_target_property(IMPORTED_LOCATION ${UnitTest_LIBRARY})
then in a subdirectory foo/CMakeLists.txt
add_executable(test_foo test/Main.cpp test/test_foo.cpp)
add_test(foo test_foo)
target_link_libraries(test_foo foo unittest++)
or should each subdirectory that contains a CMakeLists.txt file that needs
this library to link to an executable explicitly define the library in the
target's target_link_libraries call? Like this....
Example B:
in foo/CMakeLists.txt:
find_package(UnitTest)
add_executable(test_foo test/Main.cpp test/test_foo.cpp)
add_test(foo test_foo)
target_link_libraries(test_foo foo ${UnitTest_LIBRARY})
We've been following Example A, but have run into numerous link problems
because we are using NetCDF, HDF5, ExodusII and a mesh framework package
that depends on all 3. I've looked at two other projects that use CMake:
Trilinos and Yarp. Both follow Example B and since we are having so much
difficulty resolving links at run time, I wanted to know if we are
defining these dependencies correctly.
Thanks for your time.
--
Lori A. Pritchett-Sheats, PhD.
CCS-2, Computational Physics and Methods
Office: 505-665-6675
Fax: 505-665-4972
Los Alamos National Laboratory
P.O. Box 1663
MS D413
Los Alamos, NM 87544
More information about the CMake
mailing list