53 lines
2.2 KiB
ReStructuredText
53 lines
2.2 KiB
ReStructuredText
|
try_run
|
||
|
-------
|
||
|
|
||
|
Try compiling and then running some code.
|
||
|
|
||
|
::
|
||
|
|
||
|
try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
|
||
|
bindir srcfile [CMAKE_FLAGS <Flags>]
|
||
|
[COMPILE_DEFINITIONS <flags>]
|
||
|
[COMPILE_OUTPUT_VARIABLE comp]
|
||
|
[RUN_OUTPUT_VARIABLE run]
|
||
|
[OUTPUT_VARIABLE var]
|
||
|
[ARGS <arg1> <arg2>...])
|
||
|
|
||
|
Try compiling a srcfile. Return TRUE or FALSE for success or failure
|
||
|
in COMPILE_RESULT_VAR. Then if the compile succeeded, run the
|
||
|
executable and return its exit code in RUN_RESULT_VAR. If the
|
||
|
executable was built, but failed to run, then RUN_RESULT_VAR will be
|
||
|
set to FAILED_TO_RUN. COMPILE_OUTPUT_VARIABLE specifies the variable
|
||
|
where the output from the compile step goes. RUN_OUTPUT_VARIABLE
|
||
|
specifies the variable where the output from the running executable
|
||
|
goes.
|
||
|
|
||
|
For compatibility reasons OUTPUT_VARIABLE is still supported, which
|
||
|
gives you the output from the compile and run step combined.
|
||
|
|
||
|
Cross compiling issues
|
||
|
|
||
|
When cross compiling, the executable compiled in the first step
|
||
|
usually cannot be run on the build host. try_run() checks the
|
||
|
CMAKE_CROSSCOMPILING variable to detect whether CMake is in
|
||
|
crosscompiling mode. If that's the case, it will still try to compile
|
||
|
the executable, but it will not try to run the executable. Instead it
|
||
|
will create cache variables which must be filled by the user or by
|
||
|
presetting them in some CMake script file to the values the executable
|
||
|
would have produced if it had been run on its actual target platform.
|
||
|
These variables are RUN_RESULT_VAR (explanation see above) and if
|
||
|
RUN_OUTPUT_VARIABLE (or OUTPUT_VARIABLE) was used, an additional cache
|
||
|
variable RUN_RESULT_VAR__COMPILE_RESULT_VAR__TRYRUN_OUTPUT.This is
|
||
|
intended to hold stdout and stderr from the executable.
|
||
|
|
||
|
In order to make cross compiling your project easier, use try_run only
|
||
|
if really required. If you use try_run, use RUN_OUTPUT_VARIABLE (or
|
||
|
OUTPUT_VARIABLE) only if really required. Using them will require
|
||
|
that when crosscompiling, the cache variables will have to be set
|
||
|
manually to the output of the executable. You can also "guard" the
|
||
|
calls to try_run with if(CMAKE_CROSSCOMPILING) and provide an
|
||
|
easy-to-preset alternative for this case.
|
||
|
|
||
|
Set variable CMAKE_TRY_COMPILE_CONFIGURATION to choose a build
|
||
|
configuration.
|