enable_language(C) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY out) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY out) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY out) add_library(SharedTop SHARED mylib.c) add_library(StaticTop STATIC mylib.c) add_library(StaticMiddle STATIC mylib.c) add_library(StaticNone STATIC mylib.c) add_library(StaticPreBuild STATIC mylib.c) add_library(StaticPreLink STATIC mylib.c) add_library(StaticPostBuild STATIC mylib.c) add_library(StaticCc STATIC mylibcc.c) add_custom_command(TARGET StaticPreBuild PRE_BUILD COMMAND ${CMAKE_COMMAND} -E true) add_custom_command(TARGET StaticPreLink PRE_LINK COMMAND ${CMAKE_COMMAND} -E true) add_custom_command(TARGET StaticPostBuild POST_BUILD COMMAND ${CMAKE_COMMAND} -E true) add_custom_command(OUTPUT mylibcc.c COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/mylib.c ${CMAKE_BINARY_DIR}/mylibcc.c) target_link_libraries(SharedTop PRIVATE StaticMiddle) target_link_libraries(StaticTop PRIVATE StaticMiddle) target_link_libraries(StaticMiddle PRIVATE StaticNone StaticPreBuild StaticPreLink StaticPostBuild StaticCc) if(OPTIMIZE_TOP) set_target_properties(SharedTop StaticTop PROPERTIES OPTIMIZE_DEPENDENCIES TRUE) endif() if(OPTIMIZE_MIDDLE) set_target_properties(StaticMiddle PROPERTIES OPTIMIZE_DEPENDENCIES TRUE) endif() include(WriteTargets.cmake) write_targets()