Check*: Add option to pass link directories into checks

This commit is contained in:
Aliaksandr Averchanka 2024-09-09 16:45:00 +03:00
parent 6c120379df
commit 9e95bd49f2
41 changed files with 454 additions and 25 deletions

View File

@ -0,0 +1,5 @@
``CMAKE_REQUIRED_LINK_DIRECTORIES``
.. versionadded:: 3.31
A :ref:`;-list <CMake Language Lists>` of libraries search paths to pass to
the linker (see :command:`try_compile` for further details).

View File

@ -0,0 +1,99 @@
macro-required-link-directories
-------------------------------
* The :module:`CMakePushCheckState` module ``cmake_push_check_state``,
``cmake_pop_check_state`` and ``cmake_reset_check_state`` macros
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCCompilerFlag` module ``check_c_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCSourceCompiles` module ``check_c_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCSourceRuns` module ``check_c_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCXXCompilerFlag` module ``check_cxx_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCXXSourceCompiles` module ``check_cxx_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCXXSourceRuns` module ``check_cxx_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCXXSymbolExists` module ``check_cxx_symbol_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckCompilerFlag` module ``check_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckFortranCompilerFlag` module ``check_fortran_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckFortranFunctionExists` module ``check_fortran_function_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckFortranSourceCompiles` module ``check_fortran_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckFortranSourceRuns` module ``check_fortran_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckFunctionExists` module ``check_function_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckIncludeFile` module ``check_include_file`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckIncludeFiles` module ``check_include_files`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckLibraryExists` module ``check_library_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCSourceCompiles` module ``check_objc_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCSourceRuns` module ``check_objc_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCXXCompilerFlag` module ``check_objcxx_compiler_flag`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCXXSourceCompiles` module ``check_objcxx_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckOBJCXXSourceRuns` module ``check_objcxx_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckPrototypeDefinition` module ``check_prototype_definition`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckSourceCompiles` module ``check_source_compiles`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckSourceRuns` module ``check_source_runs`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckStructHasMember` module ``check_struct_has_member`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckSymbolExists` module ``check_symbol_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckTypeSize` module ``check_type_size`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
* The :module:`CheckVariableExists` module ``check_variable_exists`` macro
learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.

View File

@ -12,6 +12,7 @@ This module defines three macros: ``CMAKE_PUSH_CHECK_STATE()``
be used to save, restore and reset (i.e., clear contents) the state of
the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``,
``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``,
``CMAKE_REQUIRED_LINK_DIRECTORIES``,
``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the
various Check-files coming with CMake, like e.g. ``check_function_exists()``
etc.
@ -45,6 +46,7 @@ macro(CMAKE_RESET_CHECK_STATE)
set(CMAKE_REQUIRED_DEFINITIONS)
set(CMAKE_REQUIRED_LINK_OPTIONS)
set(CMAKE_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(CMAKE_REQUIRED_FLAGS)
set(CMAKE_REQUIRED_QUIET)
@ -58,13 +60,14 @@ macro(CMAKE_PUSH_CHECK_STATE)
math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1")
set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES})
set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES})
set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS})
set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_OPTIONS})
set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES})
set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS})
set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_QUIET})
set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES})
set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES})
set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS})
set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_OPTIONS})
set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES})
set(_CMAKE_REQUIRED_LINK_DIRECTORIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_DIRECTORIES})
set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS})
set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_QUIET})
if (${ARGC} GREATER 0 AND "${ARGV0}" STREQUAL "RESET")
cmake_reset_check_state()
@ -77,13 +80,14 @@ macro(CMAKE_POP_CHECK_STATE)
# don't pop more than we pushed
if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0")
set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_LINK_OPTIONS ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_QUIET ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_LINK_OPTIONS ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_LINK_DIRECTORIES ${_CMAKE_REQUIRED_LINK_DIRECTORIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
set(CMAKE_REQUIRED_QUIET ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1")
endif()

View File

@ -43,6 +43,8 @@ in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -45,6 +45,8 @@ Check once if C source code can be built.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -38,6 +38,8 @@ subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -43,6 +43,8 @@ in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -45,6 +45,8 @@ Check once if C++ source code can be built.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -38,6 +38,8 @@ subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -51,6 +51,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
For example:

View File

@ -43,6 +43,8 @@ in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -45,6 +45,8 @@ flags in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -29,16 +29,11 @@ Check if a Fortran function exists.
The following variables may be set before calling this macro to modify
the way the check is run:
``CMAKE_REQUIRED_LINK_OPTIONS``
.. versionadded:: 3.14
A :ref:`;-list <CMake Language Lists>` of options to add to the link
command (see :command:`try_compile` for further details).
.. include:: /module/CMAKE_REQUIRED_LINK_OPTIONS.txt
``CMAKE_REQUIRED_LIBRARIES``
A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
command. These can be the name of system libraries or they can be
:ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
further details).
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
#]=======================================================================]
include_guard(GLOBAL)
@ -58,6 +53,12 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
else()
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CFFE_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CFFE_LINK_DIRECTORIES)
endif()
set(__CheckFunction_testFortranCompilerSource
"
program TESTFortran
@ -70,8 +71,11 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
SOURCE_FROM_VAR testFortranCompiler.f __CheckFunction_testFortranCompilerSource
${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
CMAKE_FLAGS
"${_CFFE_LINK_DIRECTORIES}"
)
unset(__CheckFunction_testFortranCompilerSource)
unset(_CFFE_LINK_DIRECTORIES)
if(${VARIABLE})
set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
message(CHECK_PASS "found")

View File

@ -53,6 +53,8 @@ Check once if Fortran source code can be built.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -51,6 +51,8 @@ subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -29,6 +29,8 @@ way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
.. note::
@ -67,6 +69,12 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
else()
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CFE_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CFE_LINK_DIRECTORIES)
endif()
if(CMAKE_REQUIRED_INCLUDES)
set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
@ -89,8 +97,10 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
"${_CFE_LINK_DIRECTORIES}"
)
unset(_cfe_source)
unset(_CFE_LINK_DIRECTORIES)
if(${VARIABLE})
set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")

View File

@ -31,6 +31,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
See the :module:`CheckIncludeFiles` module to check for multiple headers
@ -87,6 +89,13 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
unset(_CIF_CMP0075)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CIF_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CIF_LINK_DIRECTORIES)
endif()
try_compile(${VARIABLE}
SOURCE_FROM_VAR CheckIncludeFile.c _CIF_SOURCE_CONTENT
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
@ -95,9 +104,11 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
"${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
"${_CIF_LINK_DIRECTORIES}"
)
unset(_CIF_LINK_OPTIONS)
unset(_CIF_LINK_LIBRARIES)
unset(_CIF_LINK_DIRECTORIES)
if(${ARGC} EQUAL 3)
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE})

View File

@ -31,6 +31,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
@ -86,6 +88,13 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
unset(_CIF_CMP0075)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CIF_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CIF_LINK_DIRECTORIES)
endif()
try_compile(${VARIABLE}
SOURCE_FROM_VAR CheckIncludeFile.cxx _CIF_SOURCE_CONTENT
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
@ -94,9 +103,11 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
"${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
"${_CIF_LINK_DIRECTORIES}"
)
unset(_CIF_LINK_OPTIONS)
unset(_CIF_LINK_LIBRARIES)
unset(_CIF_LINK_DIRECTORIES)
if(${ARGC} EQUAL 3)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})

View File

@ -37,6 +37,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
@ -126,6 +128,13 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
unset(_CIF_CMP0075)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CIF_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CIF_LINK_DIRECTORIES)
endif()
if(NOT CMAKE_REQUIRED_QUIET)
message(CHECK_START "Looking for ${_description}")
endif()
@ -137,9 +146,11 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
"${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
"${_CIF_LINK_DIRECTORIES}"
)
unset(_CIF_LINK_OPTIONS)
unset(_CIF_LINK_LIBRARIES)
unset(_CIF_LINK_DIRECTORIES)
if(${VARIABLE})
if(NOT CMAKE_REQUIRED_QUIET)
message(CHECK_PASS "found")

View File

@ -35,6 +35,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]
@ -58,6 +60,12 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
set(CHECK_LIBRARY_EXISTS_LIBRARIES
${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CLE_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${LOCATION};${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CLE_LINK_DIRECTORIES "-DLINK_DIRECTORIES:STRING=${LOCATION}")
endif()
if(CMAKE_C_COMPILER_LOADED)
set(_cle_source CheckFunctionExists.c)
@ -74,9 +82,10 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
-DLINK_DIRECTORIES:STRING=${LOCATION}
"${_CLE_LINK_DIRECTORIES}"
)
unset(_cle_source)
unset(_CLE_LINK_DIRECTORIES)
if(${VARIABLE})
if(NOT CMAKE_REQUIRED_QUIET)

View File

@ -45,6 +45,8 @@ flags in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -47,6 +47,8 @@ Check once if Objective-C source can be built.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -40,6 +40,8 @@ can subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -45,6 +45,8 @@ flags in these variables can case a false negative result.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -47,6 +47,8 @@ Check once if Objective-C++ source can be built.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -40,6 +40,8 @@ and can subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -45,6 +45,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]
@ -83,6 +85,13 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB
set(CMAKE_SYMBOL_EXISTS_INCLUDES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CPD_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CPD_LINK_DIRECTORIES)
endif()
foreach(_FILE ${_HEADER})
string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER
"#include <${_FILE}>\n")
@ -102,7 +111,9 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB
${CHECK_PROTOTYPE_DEFINITION_LIBS}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
"${CMAKE_SYMBOL_EXISTS_INCLUDES}"
"${_CPD_LINK_DIRECTORIES}"
)
unset(_CPD_LINK_DIRECTORIES)
if (${_VARIABLE})
set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")

View File

@ -76,6 +76,8 @@ Check once if source code can be built for a given language.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -62,6 +62,8 @@ subsequently be run.
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
#]=======================================================================]

View File

@ -36,6 +36,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt

View File

@ -41,6 +41,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
For example:
@ -121,6 +123,13 @@ macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE)
else()
set(CMAKE_SYMBOL_EXISTS_INCLUDES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CSE_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CSE_LINK_DIRECTORIES)
endif()
foreach(FILE ${FILES})
string(APPEND _CSE_SOURCE
"#include <${FILE}>\n")
@ -159,7 +168,9 @@ int main(int argc, char** argv)
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
"${CMAKE_SYMBOL_EXISTS_INCLUDES}"
"${_CSE_LINK_DIRECTORIES}"
)
unset(_CSE_LINK_DIRECTORIES)
if(${VARIABLE})
if(NOT CMAKE_REQUIRED_QUIET)
message(CHECK_PASS "found")

View File

@ -77,6 +77,8 @@ the way the check is run:
.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
.. include:: /module/CMAKE_REQUIRED_QUIET.txt
``CMAKE_EXTRA_INCLUDE_FILES``
@ -140,6 +142,13 @@ function(__check_type_size_impl type var map builtin language)
string(APPEND headers "#include \"${h}\"\n")
endforeach()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CTS_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CTS_LINK_DIRECTORIES)
endif()
# Perform the check.
set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin)
file(READ ${__check_type_size_dir}/CheckTypeSize.c.in src_content)
@ -151,8 +160,10 @@ function(__check_type_size_impl type var map builtin language)
CMAKE_FLAGS
"-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}"
"${_CTS_LINK_DIRECTORIES}"
COPY_FILE ${bin}
)
unset(_CTS_LINK_DIRECTORIES)
if(HAVE_${var})
# The check compiled. Load information from the binary.

View File

@ -59,13 +59,23 @@ macro(CHECK_VARIABLE_EXISTS VAR VARIABLE)
else()
set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CVE_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CVE_LINK_DIRECTORIES)
endif()
try_compile(${VARIABLE}
SOURCES ${CMAKE_ROOT}/Modules/CheckVariableExists.c
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
"${_CVE_LINK_DIRECTORIES}"
)
unset(_CVE_LINK_DIRECTORIES)
if(${VARIABLE})
set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}")
if(NOT CMAKE_REQUIRED_QUIET)

View File

@ -87,6 +87,13 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
else()
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CSC_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CSC_LINK_DIRECTORIES)
endif()
if(CMAKE_REQUIRED_INCLUDES)
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
@ -105,7 +112,9 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
"${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
"${_CSC_LINK_DIRECTORIES}"
OUTPUT_VARIABLE OUTPUT)
unset(_CSC_LINK_DIRECTORIES)
foreach(_regex ${_FAIL_REGEX})
if("${OUTPUT}" MATCHES "${_regex}")

View File

@ -79,6 +79,12 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
else()
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CSR_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CSR_LINK_DIRECTORIES)
endif()
if(CMAKE_REQUIRED_INCLUDES)
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
@ -98,7 +104,9 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
"${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}"
"${_CSR_LINK_DIRECTORIES}"
)
unset(_CSR_LINK_DIRECTORIES)
# if it did not compile make the return value fail code of 1
if(NOT ${_var}_COMPILED)
set(${_var}_EXITCODE 1)

View File

@ -5,6 +5,7 @@ set(CMAKE_EXTRA_INCLUDE_FILES file1)
set(CMAKE_REQUIRED_INCLUDES dir1)
set(CMAKE_REQUIRED_DEFINITIONS defs1 )
set(CMAKE_REQUIRED_LIBRARIES lib1)
set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir1)
set(CMAKE_REQUIRED_FLAGS flag1)
set(CMAKE_REQUIRED_QUIET 1)
@ -14,16 +15,17 @@ set(CMAKE_EXTRA_INCLUDE_FILES file2)
set(CMAKE_REQUIRED_INCLUDES dir2)
set(CMAKE_REQUIRED_DEFINITIONS defs2)
set(CMAKE_REQUIRED_LIBRARIES lib2)
set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir2)
set(CMAKE_REQUIRED_FLAGS flag2)
set(CMAKE_REQUIRED_QUIET 2)
cmake_push_check_state()
set(CMAKE_EXTRA_INCLUDE_FILES file3)
set(CMAKE_REQUIRED_DEFINITIONS defs3)
set(CMAKE_REQUIRED_INCLUDES dir3)
set(CMAKE_REQUIRED_DEFINITIONS defs3)
set(CMAKE_REQUIRED_LIBRARIES lib3)
set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir3)
set(CMAKE_REQUIRED_FLAGS flag3)
set(CMAKE_REQUIRED_QUIET 3)
@ -34,6 +36,7 @@ foreach(pair IN ITEMS
REQUIRED_INCLUDES|
REQUIRED_DEFINITIONS|
REQUIRED_LIBRARIES|
REQUIRED_LINK_DIRECTORIES|
REQUIRED_FLAGS|
REQUIRED_QUIET|
)
@ -55,6 +58,7 @@ foreach(pair IN ITEMS
REQUIRED_INCLUDES|dir2
REQUIRED_DEFINITIONS|defs2
REQUIRED_LIBRARIES|lib2
REQUIRED_LINK_DIRECTORIES|linkdir2
REQUIRED_FLAGS|flag2
REQUIRED_QUIET|2
)
@ -74,6 +78,7 @@ foreach(pair IN ITEMS
REQUIRED_INCLUDES|dir1
REQUIRED_DEFINITIONS|defs1
REQUIRED_LIBRARIES|lib1
REQUIRED_LINK_DIRECTORIES|linkdir1
REQUIRED_FLAGS|flag1
REQUIRED_QUIET|1
)

View File

@ -0,0 +1,122 @@
cmake_policy(SET CMP0075 NEW)
enable_language(C)
enable_language(CXX)
function(test_check_result isSucceed functionName)
if(isSucceed AND NOT IS_NEED_SUCCESS)
message(SEND_ERROR "${functionName}: check succeeded instead of failure")
elseif((NOT isSucceed) AND IS_NEED_SUCCESS)
message(SEND_ERROR "${functionName}: check failed instead of success")
endif()
endfunction()
# Common variables
set(validCSourceCode "int main() {return 0;}")
###
# Checking checkers
###
# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
# include(CheckCCompilerFlag)
# Also checks common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
include(CheckCSourceCompiles)
check_c_source_compiles("${validCSourceCode}" CHECK_C_SOURCE_COMPILES_SUCCEED)
test_check_result("${CHECK_C_SOURCE_COMPILES_SUCCEED}" check_c_source_compiles)
# Also checks common internal function `CMAKE_CHECK_SOURCE_RUNS()`
include(CheckCSourceRuns)
check_c_source_runs("${validCSourceCode}" CHECK_C_SOURCE_RUNS_SUCCEED)
test_check_result("${CHECK_C_SOURCE_RUNS_SUCCEED}" check_c_source_runs)
# Shares code with similar C checkers
# include(CheckCXXCompilerFlag)
# include(CheckCXXSourceCompiles)
# include(CheckCXXSourceRuns)
# include(CheckCXXSymbolExists)
# Shares code with similar C checkers
# include(CheckCompilerFlag)
# include(CheckSourceCompiles)
# include(CheckSourceRuns)
# Shares code with similar C checkers
# include(CheckFortranCompilerFlag)
# include(CheckFortranFunctionExists) # No way to test it
# include(CheckFortranSourceCompiles)
# include(CheckFortranSourceRuns)
include(CheckFunctionExists)
check_function_exists (memcpy CHECK_FUNCTION_EXISTS_SUCCEED)
test_check_result("${CHECK_FUNCTION_EXISTS_SUCCEED}" check_function_exists)
include(CheckIncludeFile)
check_include_file("stddef.h" CHECK_INCLUDE_FILE_SUCCEED)
test_check_result("${CHECK_INCLUDE_FILE_SUCCEED}" check_include_file)
include(CheckIncludeFileCXX)
check_include_file_cxx("stddef.h" CHECK_INCLUDE_FILE_CXX_SUCCEED)
test_check_result("${CHECK_INCLUDE_FILE_CXX_SUCCEED}" check_include_file_cxx)
include(CheckIncludeFiles)
check_include_files("stddef.h;stdlib.h" CHECK_INCLUDE_FILES_SUCCEED)
test_check_result("${CHECK_INCLUDE_FILES_SUCCEED}" check_include_files)
include(CheckLibraryExists)
block(PROPAGATE HAVE_LIBM)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LINK_DIRECTORIES)
check_library_exists(m ceil "" HAVE_LIBM)
endblock()
if(HAVE_LIBM)
check_library_exists(m ceil "" CHECK_LIBRARY_EXISTS_SUCCEED)
test_check_result("${CHECK_LIBRARY_EXISTS_SUCCEED}" check_library_exists)
endif()
# Shares code with similar C checkers
# include(CheckOBJCCompilerFlag)
# include(CheckOBJCSourceCompiles)
# include(CheckOBJCSourceRuns)
# Shares code with similar C checkers
# include(CheckOBJCXXCompilerFlag)
# include(CheckOBJCXXSourceCompiles)
# include(CheckOBJCXXSourceRuns)
include(CheckPrototypeDefinition)
block(PROPAGATE CHECK_PROTOTYPE_DEFINITION_WORKS)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LINK_DIRECTORIES)
check_prototype_definition(memmove
"void *memmove(void *dest, const void *src, size_t n)"
"NULL"
"string.h"
CHECK_PROTOTYPE_DEFINITION_SUCCEED)
endblock()
if (CHECK_PROTOTYPE_DEFINITION_WORKS)
check_prototype_definition(memmove
"void *memmove(void *dest, const void *src, size_t n)"
"NULL"
"string.h"
CHECK_PROTOTYPE_DEFINITION_SUCCEED)
test_check_result("${CHECK_PROTOTYPE_DEFINITION_SUCCEED}" check_prototype_definition)
endif()
# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()`
# include(CheckStructHasMember)
include(CheckSymbolExists)
check_symbol_exists(errno "errno.h" CHECK_SYMBOL_EXISTS_SUCCEED)
test_check_result("${CHECK_SYMBOL_EXISTS_SUCCEED}" check_symbol_exists)
include(CheckTypeSize)
check_type_size(int SIZEOF_INT)
test_check_result("${HAVE_SIZEOF_INT}" check_type_size)
include(CheckVariableExists)
check_variable_exists(myTestVar CHECK_VARIABLE_EXISTS_SUCCEED)
test_check_result("${CHECK_VARIABLE_EXISTS_SUCCEED}" check_variable_exists)

View File

@ -0,0 +1 @@
add_subdirectory(TestLib)

View File

@ -22,3 +22,31 @@ run_cmake(CheckIncludeFilesOkNoC)
run_cmake(CheckIncludeFilesMissingLanguage)
run_cmake(CheckIncludeFilesUnknownArgument)
run_cmake(CheckIncludeFilesUnknownLanguage)
block()
# Set common variables
set(libDir ${RunCMake_BINARY_DIR}/CheckLinkDirectoriesTestLib-build/TestLib/lib)
set(libName mySharedLibrary)
# Build common part
run_cmake(CheckLinkDirectoriesTestLib)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
run_cmake_command(CheckLinkDirectoriesTestLib ${CMAKE_COMMAND} --build .)
# Run tests cleanly
unset(RunCMake_TEST_NO_CLEAN)
unset(RunCMake_TEST_OUTPUT_MERGE)
set(RunCMake_TEST_VARIANT_DESCRIPTION "WithDirectories")
run_cmake_with_options("CheckLinkDirectories"
"-DCMAKE_REQUIRED_LIBRARIES=${libName}"
"-DCMAKE_REQUIRED_LINK_DIRECTORIES=${libDir}"
"-DIS_NEED_SUCCESS:BOOL=ON"
)
set(RunCMake_TEST_VARIANT_DESCRIPTION "WithoutDirectories")
run_cmake_with_options("CheckLinkDirectories"
"-DCMAKE_REQUIRED_LIBRARIES=${libName}"
"-DIS_NEED_SUCCESS:BOOL=OFF"
)
endblock()

View File

@ -0,0 +1,3 @@
project(TestLib C)
add_library(mySharedLibrary TestLib.c)
set_target_properties(mySharedLibrary PROPERTIES ARCHIVE_OUTPUT_DIRECTORY $<1:lib>)

View File

@ -0,0 +1,6 @@
int myTestVar = 42;
int TestSymbol(void)
{
return 0;
}