project(Export C) # We need ansi C support. if(CMAKE_ANSI_CFLAGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}") endif(CMAKE_ANSI_CFLAGS) add_library(testExe1lib STATIC testExe1lib.c) # not exported add_executable(testExe1 testExe1.c) target_link_libraries(testExe1 testExe1lib) set_property(TARGET testExe1 PROPERTY VERSION 4) add_library(testExe2libImp SHARED testExe2libImp.c) set_property(TARGET testExe2libImp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl) add_library(testExe2lib SHARED testExe2lib.c) target_link_libraries(testExe2lib testExe2libImp) set_property(TARGET testExe2lib PROPERTY LINK_INTERFACE_LIBRARIES "") add_executable(testExe2 testExe2.c) set_property(TARGET testExe2 PROPERTY ENABLE_EXPORTS 1) set_property(TARGET testExe2 PROPERTY LINK_INTERFACE_LIBRARIES testExe2lib) add_library(testLib1 STATIC testLib1.c) add_library(testLib2 STATIC testLib2.c) target_link_libraries(testLib2 testLib1) add_library(testLib3Imp SHARED testLib3Imp.c) set_property(TARGET testLib3Imp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl) add_library(testLib3 SHARED testLib3.c) target_link_libraries(testLib3 testLib3Imp) set_property(TARGET testLib3 PROPERTY LINK_INTERFACE_LIBRARIES "") set_property(TARGET testLib3 PROPERTY VERSION 1.2) set_property(TARGET testLib3 PROPERTY SOVERSION 3) add_library(testLib4 SHARED testLib4.c) set_property(TARGET testLib4 PROPERTY FRAMEWORK 1) add_executable(testExe3 testExe3.c) set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1) # Install and export from install tree. install( TARGETS testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe2lib EXPORT exp RUNTIME DESTINATION bin LIBRARY DESTINATION lib NAMELINK_SKIP ARCHIVE DESTINATION lib FRAMEWORK DESTINATION Frameworks BUNDLE DESTINATION Applications ) install( TARGETS testExe2libImp testLib3Imp EXPORT exp RUNTIME DESTINATION bin LIBRARY DESTINATION lib/impl ARCHIVE DESTINATION lib/impl ) install(EXPORT exp NAMESPACE exp_ DESTINATION lib/exp) # Export from build tree. export(TARGETS testExe1 testLib1 testLib2 testLib3 testExe2libImp testLib3Imp NAMESPACE bld_ FILE ExportBuildTree.cmake ) export(TARGETS testExe2 testLib4 testExe3 testExe2lib NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake )