1enable_language(C) 2 3set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY out) 4set(CMAKE_LIBRARY_OUTPUT_DIRECTORY out) 5set(CMAKE_RUNTIME_OUTPUT_DIRECTORY out) 6 7add_library(SharedTop SHARED mylib.c) 8add_library(StaticTop STATIC mylib.c) 9add_library(StaticMiddle STATIC mylib.c) 10 11add_library(StaticNone STATIC mylib.c) 12add_library(StaticPreBuild STATIC mylib.c) 13add_library(StaticPreLink STATIC mylib.c) 14add_library(StaticPostBuild STATIC mylib.c) 15add_library(StaticCc STATIC mylibcc.c) 16 17add_custom_command(TARGET StaticPreBuild PRE_BUILD 18 COMMAND ${CMAKE_COMMAND} -E true) 19add_custom_command(TARGET StaticPreLink PRE_LINK 20 COMMAND ${CMAKE_COMMAND} -E true) 21add_custom_command(TARGET StaticPostBuild POST_BUILD 22 COMMAND ${CMAKE_COMMAND} -E true) 23add_custom_command(OUTPUT mylibcc.c 24 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/mylib.c ${CMAKE_BINARY_DIR}/mylibcc.c) 25 26target_link_libraries(SharedTop PRIVATE StaticMiddle) 27target_link_libraries(StaticTop PRIVATE StaticMiddle) 28target_link_libraries(StaticMiddle PRIVATE StaticNone StaticPreBuild StaticPreLink StaticPostBuild StaticCc) 29 30if(OPTIMIZE_TOP) 31 set_target_properties(SharedTop StaticTop PROPERTIES 32 OPTIMIZE_DEPENDENCIES TRUE) 33endif() 34if(OPTIMIZE_MIDDLE) 35 set_target_properties(StaticMiddle PROPERTIES 36 OPTIMIZE_DEPENDENCIES TRUE) 37endif() 38 39include(WriteTargets.cmake) 40write_targets() 41