mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-08 07:10:12 -05:00
521a6d409c
Add the support of the ARCHIVER: prefix to offer a portable way to pass options to the archiver when the compiler is used as driver.
67 lines
2.5 KiB
CMake
67 lines
2.5 KiB
CMake
|
|
enable_language(C)
|
|
|
|
set(cfg_dir)
|
|
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
if(_isMultiConfig)
|
|
set(cfg_dir /Debug)
|
|
endif()
|
|
|
|
set(DUMP_EXE "${CMAKE_CURRENT_BINARY_DIR}${cfg_dir}/dump${CMAKE_EXECUTABLE_SUFFIX}")
|
|
|
|
add_executable(dump dump.c)
|
|
|
|
# Overwrite archive rule to enable command line dump
|
|
set(CMAKE_C_CREATE_STATIC_LIBRARY "\"${DUMP_EXE}\" create_archive <LINK_FLAGS>")
|
|
|
|
function(add_test_library target_name options)
|
|
add_library(${target_name} STATIC lib.c)
|
|
set_property(TARGET ${target_name} PROPERTY STATIC_LIBRARY_OPTIONS "${options}")
|
|
|
|
add_dependencies(${target_name} dump)
|
|
endfunction()
|
|
|
|
# Use ARCHIVER alone
|
|
add_test_library(archiver "ARCHIVER:-foo,bar")
|
|
|
|
# Use ARCHIVER with SHELL
|
|
add_test_library(archiver_shell "ARCHIVER:SHELL:-foo bar")
|
|
|
|
# Nested ARCHIVER: prefixes should be preserved as written, only the outermost ARCHIVER: prefix removed
|
|
add_test_library(archiver_nested "ARCHIVER:ARCHIVER:-foo,bar")
|
|
|
|
# Same with ARCHIVER:SHELL:
|
|
add_test_library(archiver_nested_shell "ARCHIVER:SHELL:ARCHIVER:-foo bar")
|
|
|
|
# generate reference for ARCHIVER flag
|
|
if (CMAKE_C_ARCHIVER_WRAPPER_FLAG)
|
|
set(archiver_flag ${CMAKE_C_ARCHIVER_WRAPPER_FLAG})
|
|
list(GET archiver_flag -1 archiver_space)
|
|
if (archiver_space STREQUAL " ")
|
|
list(REMOVE_AT archiver_flag -1)
|
|
else()
|
|
set(archiver_space)
|
|
endif()
|
|
list (JOIN archiver_flag " " archiver_flag)
|
|
if (CMAKE_C_ARCHIVER_WRAPPER_FLAG_SEP)
|
|
set(archiver_sep "${CMAKE_C_ARCHIVER_WRAPPER_FLAG_SEP}")
|
|
|
|
set(archiver_flag_nested "${archiver_flag}${archiver_space}ARCHIVER:-foo${archiver_sep}bar")
|
|
set(archiver_flag_nested_shell "${archiver_flag}${archiver_space}ARCHIVER:-foo${archiver_sep}bar")
|
|
string (APPEND archiver_flag "${archiver_space}" "-foo${archiver_sep}bar")
|
|
else()
|
|
set(archiver_prefix "${archiver_flag}${archiver_space}")
|
|
|
|
set(archiver_flag_nested "${archiver_prefix}ARCHIVER:-foo ${archiver_prefix}bar")
|
|
set(archiver_flag_nested_shell "${archiver_prefix}ARCHIVER:-foo ${archiver_prefix}bar")
|
|
set (archiver_flag "${archiver_prefix}-foo ${archiver_prefix}bar")
|
|
endif()
|
|
else()
|
|
set(archiver_flag_nested "ARCHIVER:-foo bar")
|
|
set(archiver_flag_nested_shell "ARCHIVER:-foo bar")
|
|
set(archiver_flag "-foo bar")
|
|
endif()
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER.txt" "${archiver_flag}")
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER_NESTED.txt" "${archiver_flag_nested}")
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ARCHIVER_NESTED_SHELL.txt" "${archiver_flag_nested_shell}")
|