try_compile — CMake 3.14.7 Documentation (original) (raw)
Contents
Try building some code.
Try Compiling Whole Projects¶
try_compile( [] [CMAKE_FLAGS ...] [OUTPUT_VARIABLE ])
Try building a project. The success or failure of the try_compile
, i.e. TRUE
or FALSE
respectively, is returned in <resultVar>
.
In this form, <srcdir>
should contain a complete CMake project with aCMakeLists.txt
file and all sources. The <bindir>
and <srcdir>
will not be deleted after this command is run. Specify <targetName>
to build a specific target instead of the all
or ALL_BUILD
target. See below for the meaning of other options.
Try Compiling Source Files¶
try_compile( <srcfile|SOURCES srcfile...> [CMAKE_FLAGS ...] [COMPILE_DEFINITIONS ...] [LINK_OPTIONS ...] [LINK_LIBRARIES ...] [OUTPUT_VARIABLE ] [COPY_FILE [COPY_FILE_ERROR ]] [_STANDARD ] [_STANDARD_REQUIRED ] [_EXTENSIONS ] )
Try building an executable or static library from one or more source files (which one is determined by the CMAKE_TRY_COMPILE_TARGET_TYPEvariable). The success or failure of the try_compile
, i.e. TRUE
orFALSE
respectively, is returned in <resultVar>
.
In this form, one or more source files must be provided. IfCMAKE_TRY_COMPILE_TARGET_TYPE is unset or is set to EXECUTABLE
, the sources must include a definition for main
and CMake will create aCMakeLists.txt
file to build the source(s) as an executable. If CMAKE_TRY_COMPILE_TARGET_TYPE is set to STATIC_LIBRARY
, a static library will be built instead and no definition for main
is required. For an executable, the generated CMakeLists.txt
file would contain something like the following:
add_definitions() include_directories(${INCLUDE_DIRECTORIES}) link_directories(${LINK_DIRECTORIES}) add_executable(cmTryCompileExec ...) target_link_options(cmTryCompileExec PRIVATE ) target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})
The options are:
CMAKE_FLAGS <flags>...
Specify flags of the form -DVAR:TYPE=VALUE
to be passed to the cmake
command-line used to drive the test build. The above example shows how values for variablesINCLUDE_DIRECTORIES
, LINK_DIRECTORIES
, and LINK_LIBRARIES
are used.
COMPILE_DEFINITIONS <defs>...
Specify -Ddefinition
arguments to pass to add_definitions()in the generated test project.
COPY_FILE <fileName>
Copy the built executable or static library to the given <fileName>
.
COPY_FILE_ERROR <var>
Use after COPY_FILE
to capture into variable <var>
any error message encountered while trying to copy the file.
LINK_LIBRARIES <libs>...
Specify libraries to be linked in the generated project. The list of libraries may refer to system libraries and toImported Targets from the calling project.
If this option is specified, any -DLINK_LIBRARIES=...
value given to the CMAKE_FLAGS
option will be ignored.
LINK_OPTIONS <options>...
Specify link step options to pass to target_link_options() or to set the STATIC_LIBRARY_OPTIONS target property in the generated project, depending on the CMAKE_TRY_COMPILE_TARGET_TYPE variable.
OUTPUT_VARIABLE <var>
Store the output from the build process in the given variable.
<LANG>_STANDARD <std>
Specify the C_STANDARD, CXX_STANDARD, or CUDA_STANDARD target property of the generated project.
<LANG>_STANDARD_REQUIRED <bool>
Specify the C_STANDARD_REQUIRED,CXX_STANDARD_REQUIRED, or CUDA_STANDARD_REQUIREDtarget property of the generated project.
<LANG>_EXTENSIONS <bool>
Specify the C_EXTENSIONS, CXX_EXTENSIONS, or CUDA_EXTENSIONS target property of the generated project.
In this version all files in <bindir>/CMakeFiles/CMakeTmp
will be cleaned automatically. For debugging, --debug-trycompile
can be passed to cmake
to avoid this clean. However, multiple sequentialtry_compile
operations reuse this single output directory. If you use--debug-trycompile
, you can only debug one try_compile
call at a time. The recommended procedure is to protect all try_compile
calls in your project by if(NOT DEFINED <resultVar>)
logic, configure with cmake all the way through once, then delete the cache entry associated with the try_compile call of interest, and then re-run cmake again with--debug-trycompile
.