From e5784836a699a045964140b30aed142c6f94c747 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 21 Jan 2017 16:42:43 +0300 Subject: CMakeLists.txt: refactoring --- CMakeLists.txt | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2838f9..8d3a6c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,30 +7,44 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) endif() get_directory_property(parent_directory PARENT_DIRECTORY) -set(is_root $) +set(is_root_project $) + +function(use_static_runtime_msvc target) + target_compile_options(${target} PRIVATE + $<$:/MTd> + $<$:/MT>) +endfunction() + +function(use_static_runtime_gcc target) + get_target_property(type ${target} TYPE) + if(type STREQUAL EXECUTABLE) + target_link_libraries(${target} PRIVATE -static) + endif() +endfunction() function(use_static_runtime target) - if(TARGET ${target} AND is_root) - if(MSVC) - target_compile_options(${target} PRIVATE - $<$:/MT> - $<$:/MTd>) - elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - get_target_property(type ${target} TYPE) - if(type STREQUAL EXECUTABLE) - target_link_libraries(${target} PRIVATE -static) - endif() - endif() + if(MSVC) + use_static_runtime_msvc(${target}) + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + use_static_runtime_gcc(${target}) + endif() +endfunction() + +function(strip_symbol_table_gcc target) + target_link_libraries(${target} PRIVATE $<$:-s>) +endfunction() + +function(strip_symbol_table target) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + strip_symbol_table_gcc(${target}) endif() endfunction() macro(add_executable target) _add_executable(${ARGV}) - if(TARGET ${target}) + if(TARGET ${target} AND is_root_project) use_static_runtime(${target}) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - target_link_libraries(${target} PRIVATE $<$:-s>) - endif() + strip_symbol_table(${target}) endif() endmacro() @@ -53,7 +67,9 @@ use_static_runtime(libaes) if(MSVC) target_compile_definitions(libaes PRIVATE _CRT_SECURE_NO_WARNINGS) -elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) target_compile_options(libaes PUBLIC -mssse3 -maes) endif() -- cgit v1.2.3