[CMake] MSVC7.1 static link question
Brad King
brad.king at kitware.com
Wed Feb 11 08:54:05 EST 2009
Philip Lowman wrote:
> On Tue, Feb 10, 2009 at 1:01 PM, Brad King <brad.king at kitware.com
> CMake 2.6 makes it easy to export targets from one project (either its
> build tree or install tree) for use by another project.
>
> Is this the easiest way to register dependencies of IMPORTED static
> libraries against each other? I'm just curious if there are plans to
> make target_link_libraries() work for this or is there a technical
> problem allowing it?
I do not plan to allow target_link_libraries for this. One must use
IMPORTED_LINK_INTERFACE_LIBRARIES. However, it is easier than your
example makes it because the property can name other imported targets:
add_library(baz STATIC IMPORTED)
set_target_properties(baz PROPERTIES
IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbaz.a
IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbazd.a)
add_library(bar STATIC IMPORTED)
set_target_properties(bar PROPERTIES
IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbar.a
IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbard.a
IMPORTED_LINK_INTERFACE_LIBRARIES baz) # <-- dependency is here
Note if the outside project is also created by CMake, the install(EXPORT)
feature can generate the proper import code for it.
-Brad
> project(Foo)
> cmake_minimum_required(VERSION 2.6)
>
> add_library(baz STATIC IMPORTED)
> set_target_properties(baz PROPERTIES
> IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libbaz.a
> IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbaz.a
> IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbazd.a)
>
> add_library(bar STATIC IMPORTED)
> set_target_properties(bar PROPERTIES
> IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libbar.a
> IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbar.a
> IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbard.a)
>
> #target_link_libraries(bar baz) # no worky
> get_target_property(baz_loc baz IMPORTED_LOCATION)
> get_target_property(baz_loc_rel baz IMPORTED_LOCATION_RELEASE)
> get_target_property(baz_loc_deb baz IMPORTED_LOCATION_DEBUG)
> set_target_properties(bar PROPERTIES
> IMPORTED_LINK_INTERFACE_LIBRARIES ${baz_loc}
> IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE ${baz_loc_rel}
> IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG ${baz_loc_deb})
>
> add_executable(foo foo.cc)
> target_link_libraries(foo bar) # dependency on baz is implied
>
>
> --
> Philip Lowman
More information about the CMake
mailing list