Brad King <[email protected]> writes:

> On 06/20/2014 01:09 PM, Philipp Möller wrote:
>> +#   Boost::boost                  - interface target containing the include
>> +#                                   directory
>
> Nice.
>
>> +      if(Boost_USE_STATIC_LIBS)
>> +        add_library(Boost::${COMPONENT} STATIC IMPORTED)
>> +      else()
>> +        add_library(Boost::${COMPONENT} SHARED IMPORTED)
>> +      endif()
>
> IIRC, Boost_USE_STATIC_LIBS asks for static libraries, but when it is
> OFF we might still get static libraries.  Therefore the else() case
> still needs to mark it as UNKNOWN.

You are right. Attached is a fixed patch.

commit 240cfd47a4980965f18068f6f35c6b7071497d32
Author: Philipp Möller <[email protected]>
Date:   Fri Jun 20 19:09:28 2014 +0200

    FindBoost.cmake: Add Boost::boost and Boost::<C> targets and documentation

diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake
index dfd4460..705b250 100644
--- a/Modules/FindBoost.cmake
+++ b/Modules/FindBoost.cmake
@@ -53,6 +53,24 @@
 #   Boost_<C>_LIBRARY_DEBUG   - Component <C> library debug variant
 #   Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
 #
+# In addition to the above variables this module creates the following
+# :prop_tgt:`IMPORTED` targets::
+#
+#   Boost::boost                  - interface target containing the include
+#                                   directory
+#   Boost::<C>                    - shared or static library target for a
+#                                   component (<C> is lower-case)
+#   Boost::diagnostic_definitions - interface target to enable diagnostic
+#                                   information about Boost's automatic linking
+#                                   during compilation
+#
+# Component targets never depend on each even though they might
+# require each other. It is important to note that the imported
+# targets behave differently than variables created by this module:
+# multiple calls to find_package(Boost) in the same directory or
+# sub-directories with different options (e.g. static or shared) will
+# not override the values of the targets created by the first call.
+#
 # Users may set these hints or results as cache entries.  Projects
 # should not read these entries directly but instead use the above
 # result variables.  Note that some hint names start in upper-case
@@ -524,6 +542,13 @@ if(Boost_DEBUG)
                  "Boost_NO_SYSTEM_PATHS = ${Boost_NO_SYSTEM_PATHS}")
 endif()
 
+# Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
+# will only contain any interface definitions on WIN32, but is created
+# on all platforms to keep end user code free from platform dependent
+# code.
+if(NOT TARGET Boost::diagnostic_definitions)
+  add_library(Boost::diagnostic_definitions INTERFACE IMPORTED)
+endif()
 if(WIN32)
   # In windows, automatic linking is performed, so you do not have
   # to specify the libraries.  If you are linking to a dynamic
@@ -543,6 +568,8 @@ if(WIN32)
   # code to emit a #pragma message each time a library is selected
   # for linking.
   set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
+  set_target_properties(Boost::diagnostic_definitions PROPERTIES 
+    INTERFACE_COMPILE_DEFINITIONS "BOOST_LIB_DIAGNOSTIC")
 endif()
 
 _Boost_CHECK_SPELLING(Boost_ROOT)
@@ -1155,11 +1182,36 @@ else()
 endif()
 
 # ------------------------------------------------------------------------
-#  Notification to end user about what was found
+#  Notification to end user about what was found and creation of targets.
 # ------------------------------------------------------------------------
 
 set(Boost_LIBRARIES "")
 if(Boost_FOUND)
+  if(NOT TARGET Boost::boost)
+    add_library(Boost::boost INTERFACE IMPORTED)
+    set_target_properties(Boost::boost PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIR}")
+  endif()
+
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+    if(NOT TARGET Boost::${COMPONENT})
+      if(Boost_USE_STATIC_LIBS)
+        add_library(Boost::${COMPONENT} STATIC IMPORTED)
+      else()
+        # Even if Boost_USE_STATIC_LIBS is OFF, we might have static
+        # libraries as a result.
+        add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
+      endif()
+
+      set_target_properties(Boost::${COMPONENT} PROPERTIES
+        IMPORTED_LOCATION "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}"
+        IMPORTED_LOCATION_RELEASE "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}"
+        IMPORTED_LOCATION_DEBUG "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
+    endif()
+  endforeach()
+
   if(NOT Boost_FIND_QUIETLY)
     message(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
     if(Boost_FIND_COMPONENTS)
-- 

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