On Sunday 29 April 2012, Stephen Kelly wrote: > Hi there, > > The topic of 'target usage requirements' has come up several times. It's > something I'd like to work further towards in CMake 2.8.9. > > I have created a wiki page on the KDE wiki (there for my convenience > mostly) so that we can discuss the design, implementation and > implications. > > http://community.kde.org/Frameworks/Epics/CMake_target_usage_requirements > > Thanks for any comments,
Some comments: You propose target_use_package(Foo Bar) to state that the target Foo should use the include dirs and libraries from Bar. I like the idea of having a separate command for that. I do not like the idea that target_use_package() should automatically do a find_package() for several reasons. * find_package() has many options, in the end they would all have to be present there too * find_package() is an important part of the CMakeLists.txt, it should not be hidden * wouldn't this fall back to a find_package() call with its associated error messages at cmake-time for every typo in the package name ? Looking at other cmake commands, many of them now have two modes, an old one, where simply the options are listed without separating keywords: find_library(FOO_LIBRARY foo /opt/foo /usr/foo/lib) and a new, more powerful one with additional keywords: find_library(FOO_LIBRARY NAMES foo PATHS /opt/foo /usr/foo/lib) When adding a new command, we should start with the keyword-based variant, to avoid having two signatures in the future. This also makes the code more explicit about what it does, less guessing involved for readers: target_use_package(Foo IMPORTED_TARGETS Bar Blub) or target_use_package(Foo VIA_PREFIX Bar_Bat ) or target_use_package(Foo PACKAGE Bar) Doing it this way would also solve the problem that your prefix-based example: target_use_package(Foo ${Bar_Bat_LIBRARIES}) "... Otherwise, the variables with the appropriate naming conventions (eg Bar_Bat_LIBRARIES Bar_Bat_INCLUDE_DIRS) are used." the target_use_package() implementation would get to see that value of ${Bar_Bat_LIBRARIES}, which might be "/usr/lib/libbat.so;/usr/lib/libbar.so", and wouldn't be able to find out about prefixes anymore. Alex -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers