On 12/21/2016 07:12 AM, Florent Castelli wrote:
> find_package(foo)
> if(NOT FOO_FOUND)
>   add_library(foo STATIC foo.cpp)
> endif()

Instead do

  find_package(foo)
  if(NOT FOO_FOUND)
    add_subdirectory(bundled_foo)
  endif()

so that the imported targets are visible.  Inside the bundled_foo you can build
the target and then crate an ALIAS library whose name matches what the imported
target would have been.

> make imported libraries global by default

The reason they are locally scoped is that find_package() may load
different, possibly conflicting, external packages in separate directories.
The find_package() call should be made at the highest level that contains
anything that directly references the target.  See above example.

An alternative is:

  find_package(foo)
  add_library(Foo INTERFACE)
  target_link_libraries(Foo PUBLIC FOO::FOO)

That will make a globally visible Foo target that when used forwards all
usage requirements from the imported target.

-Brad

-- 

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-developers

Reply via email to