cmake CheckSymbolExists

CheckSymbolExists is a common module of CMake, located in the /usr/share/cmake-3.5/Modules directory. The module defines the macrocheck_symbol_exists

MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)

The function of this macro is to find out whether the relevant symbol (SYMBOL) is contained in the relevant file (FILES), and if it exists, set VARIABLE to 1.

Use check_symbol_exists宏需要在CMake file to include CheckSymbolExists, namely:

 INCLUDE(CheckSymbolExists)

And then usingcheck_symbol_exists检查symbol时候存在

such as 

check_symbol_exists(SHM_HUGETLB sys/shm.h  HAVE_DECL_SHM_HUGETLB)

In the example above, the SHM_HUGETLB symbol is searched in the sys/shm.h file. If SHM_HUGETLB exists, define HAVE_DECL_SHM_HUGETLB, and its value is 1.

check_symbol_existsExplanation of macros

Provides a macro to check if a symbol exists as a function, variable, or macro in C.

check_symbol_exists

check_symbol_exists(<symbol> <files> <variable>)

Check that the <symbol> is available after including given header <files> and store the result in a <variable>. Specify the list of files in one argument as a semicolon-separated list. <variable> will be created as an internal cache variable.

If the header files define the symbol as a macro it is considered available and assumed to work. If the header files declare the symbol as a function or variable then the symbol must also be available for linking (so intrinsics may not be detected). If the symbol is a type, enum value, or intrinsic it will not be recognized (consider using CheckTypeSize or CheckCSourceCompiles). If the check needs to be done in C++, consider using CheckCXXSymbolExists instead.

The following variables may be set before calling this macro to modify the way the check is run:

CMAKE_REQUIRED_FLAGS

string of compile command line flags.

CMAKE_REQUIRED_DEFINITIONS

;-list of macros to define (-DFOO=bar).

CMAKE_REQUIRED_INCLUDES

;-list of header search paths to pass to the compiler.

CMAKE_REQUIRED_LINK_OPTIONS

;-list of options to add to the link command.

CMAKE_REQUIRED_LIBRARIES

;-list of libraries to add to the link command. See policy CMP0075.

CMAKE_REQUIRED_QUIET

execute quietly without messages.

For example:

include(CheckSymbolExists)

# Check for macro SEEK_SET
check_symbol_exists(SEEK_SET "stdio.h" HAVE_SEEK_SET)#检查头文件stdio.h中时候有SEEK_SET宏,若有则定义HAVE_SEEK_SET缓存变量,固定设置为1
# Check for function fopen
check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)#检查头文件stdio.h中时候有fopen函数,若有哲定义HAVE_FOPEN缓存变量,固定设置为1

 

Guess you like

Origin blog.csdn.net/sunlin972913894/article/details/107034007