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