Procházet zdrojové kódy

try_run: Add support for LINK_LIBRARIES option.

Most functionality is already implemented in Source/cmCoreTryCompile.{h,cxx}.
Document and improve argument parsing.

This functionality is already being used by a number of modules, like
CheckCSourceCompiles.cmake, but it is not documented.
Matt McCormick před 10 roky
rodič
revize
e2b1f0583f

+ 8 - 1
Help/command/try_run.rst

@@ -6,8 +6,9 @@ Try compiling and then running some code.
 ::
 
   try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
-          bindir srcfile [CMAKE_FLAGS <Flags>]
+          bindir srcfile [CMAKE_FLAGS <flags>]
           [COMPILE_DEFINITIONS <flags>]
+          [LINK_LIBRARIES <libs>]
           [COMPILE_OUTPUT_VARIABLE comp]
           [RUN_OUTPUT_VARIABLE run]
           [OUTPUT_VARIABLE var]
@@ -22,6 +23,12 @@ 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.
 

+ 5 - 0
Help/release/dev/try-run-link-libraries.rst

@@ -0,0 +1,5 @@
+try-run-link-libraries
+----------------------
+
+* The :command:`try_run` command learned to honor the ``LINK_LIBRARIES``
+  option just as :command:`try_compile` already does.

+ 1 - 1
Source/cmCoreTryCompile.cxx

@@ -109,7 +109,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
               }
           default:
             this->Makefile->IssueMessage(cmake::FATAL_ERROR,
-              "Only libraries may be used as try_compile IMPORTED "
+              "Only libraries may be used as try_compile or try_run IMPORTED "
               "LINK_LIBRARIES.  Got " + std::string(tgt->GetName()) + " of "
               "type " + tgt->GetTargetTypeName(tgt->GetType()) + ".");
             return -1;

+ 2 - 1
Source/cmTryRunCommand.cxx

@@ -48,7 +48,8 @@ bool cmTryRunCommand
       {
       ++i;
       while (i < argv.size() && argv[i] != "COMPILE_DEFINITIONS" &&
-             argv[i] != "CMAKE_FLAGS")
+             argv[i] != "CMAKE_FLAGS" &&
+             argv[i] != "LINK_LIBRARIES")
         {
         runArgs += " ";
         runArgs += argv[i];

+ 2 - 2
Tests/RunCMake/try_compile/BadLinkLibraries-stderr.txt

@@ -1,5 +1,5 @@
 CMake Error at BadLinkLibraries.cmake:2 \(try_compile\):
-  Only libraries may be used as try_compile IMPORTED LINK_LIBRARIES.  Got
-  not_a_library of type UTILITY.
+  Only libraries may be used as try_compile or try_run IMPORTED
+  LINK_LIBRARIES.  Got not_a_library of type UTILITY.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)