60 lines
2.6 KiB
ReStructuredText
60 lines
2.6 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>]
|
|
[LINK_LIBRARIES <libs>]
|
|
[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.
|
|
|
|
The srcfile signature also accepts a LINK_LIBRARIES argument which may
|
|
contain a list of libraries or IMPORTED targets which will be linked
|
|
to in the generated project. If LINK_LIBRARIES is specified as a
|
|
parameter to try_run, then any LINK_LIBRARIES passed as
|
|
CMAKE_FLAGS will be ignored.
|
|
|
|
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.
|