Skip to content

Instantly share code, notes, and snippets.

@scivision
Last active October 20, 2022 10:14
Show Gist options
  • Save scivision/bccb726e951a6e0ec40e77789745e07a to your computer and use it in GitHub Desktop.
Save scivision/bccb726e951a6e0ec40e77789745e07a to your computer and use it in GitHub Desktop.
CMake find_library force static search
# CMake find_library() defaults to shared library before static.
# this order can be programatically set as below.
cmake_minimum_required(VERSION 3.1)
project(demo LANGUAGES C)
# arbitrary library to demo search
if(MSVC)
set(libname msvcrt)
else()
set(libname z)
endif()
message(STATUS "default CMake library suffix search order: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
# MinGW: .dll.a;.a;.lib
# Visual Studio: .lib
# macOS: .tbd;.dylib;.so;.a
# Linux: .so;.a
message(STATUS "CMake shared library suffix: ${CMAKE_SHARED_LIBRARY_SUFFIX}")
message(STATUS "CMake shared module suffix: ${CMAKE_SHARED_MODULE_SUFFIX}")
message(STATUS "CMake static library suffix: ${CMAKE_STATIC_LIBRARY_SUFFIX}")
# set(CMAKE_FIND_DEBUG_MODE on)
find_library(lib_default NAMES ${libname}
NO_CACHE
)
if(NOT lib_default)
message(FATAL_ERROR "find_library() failed to find ${libname}")
endif()
message(STATUS "find_library() found ${lib_default}")
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
message(STATUS "searching for static library: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
find_library(lib_static NAMES ${libname}
NO_CACHE)
if(NOT lib_static)
message(FATAL_ERROR "find_library() failed to find ${libname} with static suffix")
endif()
message(STATUS "find_library() found ${lib_static}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment