diff options
author | Brad King <brad.king@kitware.com> | 2011-03-03 23:02:53 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2011-03-04 13:37:57 (GMT) |
commit | 077954d4cbd0d2f8b8ae96964bfe5c9747934fe8 (patch) | |
tree | 678c19be3cdce2b6f34013a62dbfe5376779b31a /Tests/LinkStatic | |
parent | 5abfb571843dba949e010f3b2840d8882d0f3d73 (diff) | |
download | CMake-077954d4cbd0d2f8b8ae96964bfe5c9747934fe8.zip CMake-077954d4cbd0d2f8b8ae96964bfe5c9747934fe8.tar.gz CMake-077954d4cbd0d2f8b8ae96964bfe5c9747934fe8.tar.bz2 |
Test static linking with LINK_SEARCH_START_STATIC
Add "LinkStatic" test that links a static executable against "libm.a".
Pass both "/usr/lib/libm.a" and "-lm" to target_link_libraries to
trigger the link type logic for both cases. If CMake incorrectly
switches the link type to shared for "-lm" then the link will fail.
Diffstat (limited to 'Tests/LinkStatic')
-rw-r--r-- | Tests/LinkStatic/CMakeLists.txt | 27 | ||||
-rw-r--r-- | Tests/LinkStatic/LinkStatic.c | 5 |
2 files changed, 32 insertions, 0 deletions
diff --git a/Tests/LinkStatic/CMakeLists.txt b/Tests/LinkStatic/CMakeLists.txt new file mode 100644 index 0000000..2062c43 --- /dev/null +++ b/Tests/LinkStatic/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 2.8.4.20110303 FATAL_ERROR) +project(LinkStatic C) + +if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "^(GNU)$") + message(FATAL_ERROR "This test works only with the GNU compiler!") +endif() + +find_library(MATH_LIBRARY NAMES libm.a) +if(MATH_LIBRARY) + get_filename_component(MATH_LIB_DIR ${MATH_LIBRARY} PATH) + link_directories(${MATH_LIB_DIR}) + # Name the library both with a full path and as "-lm" to + # activate the link type switching code for both cases. + # If the second one links shared then the link will fail. + set(MATH_LIBRARIES ${MATH_LIBRARY} -lm) +else() + message(FATAL_ERROR "Cannot find libm.a needed for this test") +endif() + +add_executable(LinkStatic LinkStatic.c) +target_link_libraries(LinkStatic ${MATH_LIBRARIES}) + +# Enable static linking. +set(LinkStatic_FLAG "-static" CACHE STRING "Flag to link statically") +set_property(TARGET LinkStatic PROPERTY LINK_FLAGS "${LinkStatic_FLAG}") +set_property(TARGET LinkStatic PROPERTY LINK_SEARCH_START_STATIC 1) +#set_property(TARGET LinkStatic PROPERTY LINK_SEARCH_END_STATIC 1) # insufficient diff --git a/Tests/LinkStatic/LinkStatic.c b/Tests/LinkStatic/LinkStatic.c new file mode 100644 index 0000000..3600977 --- /dev/null +++ b/Tests/LinkStatic/LinkStatic.c @@ -0,0 +1,5 @@ +#include <math.h> +int main(void) +{ + return (int)sin(0); +} |