I think cmake's find_package is only a first order approximation to premake's usages. What usage library targets have that find_package doesn't is the ability to cleanly inject dependency info (like include dirs or link libraries) into any target that claims to be dependent on the library. This is achieved simply by having the target call "uses <library>"... there is no need for the target to explicitly add anything to target_link_libraries() or include_directories().

I guess it's a bit like calling include_directories() twice, once in the CMakeLists.txt for the library and again in the CMakeLists.txt file for the target using the library, but then you'd need to have the latter include() the former for it to work (as having target add_subdirectory(library) wouldn't have the same accumulative effect). But for accumulating all linker objects together, this wouldn't work (that is, having target call target_link_libraries() on its binaries then include()'ing another file defining library which calls target_link_libraries() for its binaries). Target would have to either add something via target_link_libraries() or call add_dependencies(target library).

I guess the crux of it is that target shouldn't have to concern itself with library's business. It should be library's job to add library's header paths to include_directories(), or its binaries to target_link_libraries(). Target should only add its own header paths and binaries. It's the whole 'separation of concerns' or 'modular object programming paradigm' argument.

I guess I'd say usages seem to be like a combination of include_directories, add_dependencies and target_link_libraries, but done in a more succinct way and put in their proper place. Apart from the succinctness, can this be done in CMake?


On 16/01/2012 11:54 PM, Yuri Timenkov wrote:

if i understand correctly it's CMake's find_package analog.

On Jan 16, 2012 10:41 AM, "Lance Luvaul" <[email protected] <mailto:[email protected]>> wrote:

    See
    
http://sourceforge.net/tracker/index.php?func=detail&aid=2794681&group_id=71616&atid=531880
    
<http://sourceforge.net/tracker/index.php?func=detail&aid=2794681&group_id=71616&atid=531880>
    for more detail on what constitutes a usage-target.   How can I
    achieve the same result in CMake?  Thanks.
    --

    Powered by www.kitware.com <http://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://www.cmake.org/mailman/listinfo/cmake

--

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://www.cmake.org/mailman/listinfo/cmake

Reply via email to