mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 05:11:15 -06:00
Add an `OPTIMIZE_DEPENDENCIES` target property and supporting `CMAKE_OPTIMIZE_DEPENDENCIES` variable to optionally enable pruning and flattening of outgoing dependencies from static libraries. Since they do not actually link, they only depend on side effects of their dependencies. Therefore we can drop dependencies that contribute no side effects.
41 lines
1.3 KiB
CMake
41 lines
1.3 KiB
CMake
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()
|