1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

Check{,C,CXX,Fortran,OBJC,OBJCXX}CompilerFlag: Update documentation

- Added intro code blocks showing how to include these modules.
- Used word "command" instead of "macro".
- Added examples sections.
- Updated and synced descriptions of commands and arguments.
- Added a rubric title for variables that affect the checks.
- Listed CMAKE_TRY_COMPILE_TARGET_TYPE variable in the rubric together
  with CMAKE_REQUIRED_* variables.
- Added link to CheckCompilerFlag module in the target_compile_options()
  docs.
- Used lowercase style for check_fortran_compiler_flag() command.
- Added a link to `$<COMPILE_LANGUAGE:languages>` generator expression
  so it can be linked from other pages (See commit
  2e37a20f02 for more info on the initial
  style used).
- Fixed the GENEX_NOTE inclusion (starting with line after the 2nd line)
  where part of the sentence was rendered in the output.
This commit is contained in:
Peter Kokot
2025-05-29 00:16:39 +02:00
parent 9ffbef62ca
commit ac67631b02
13 changed files with 423 additions and 111 deletions

View File

@@ -41,7 +41,8 @@ this command is in a compiler-specific conditional clause:
endif() endif()
To set per-language options, use the :genex:`$<COMPILE_LANGUAGE>` To set per-language options, use the :genex:`$<COMPILE_LANGUAGE>`
or :genex:`$<COMPILE_LANGUAGE:languages>` generator expressions. or :genex:`$<COMPILE_LANGUAGE:languages> <COMPILE_LANGUAGE:languages>`
generator expressions.
See Also See Also
^^^^^^^^ ^^^^^^^^

View File

@@ -34,7 +34,7 @@ The named ``<target>`` must have been created by a command such as
.. |more_see_also| replace:: See the :manual:`cmake-compile-features(7)` .. |more_see_also| replace:: See the :manual:`cmake-compile-features(7)`
manual for information on compile features and a list of supported compilers. manual for information on compile features and a list of supported compilers.
.. include:: include/GENEX_NOTE.rst .. include:: include/GENEX_NOTE.rst
:start-line: 1 :start-line: 2
See Also See Also
^^^^^^^^ ^^^^^^^^

View File

@@ -69,3 +69,6 @@ See Also
* :variable:`CMAKE_<LANG>_FLAGS` and :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` * :variable:`CMAKE_<LANG>_FLAGS` and :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>`
add language-wide flags passed to all invocations of the compiler. add language-wide flags passed to all invocations of the compiler.
This includes invocations that drive compiling and those that drive linking. This includes invocations that drive compiling and those that drive linking.
* The :module:`CheckCompilerFlag` module to check whether the compiler
supports a given flag.

View File

@@ -71,7 +71,8 @@ included by absolute path. For example:
) )
.. |command_name| replace:: ``target_precompile_headers`` .. |command_name| replace:: ``target_precompile_headers``
.. |more_see_also| replace:: The :genex:`$<COMPILE_LANGUAGE:...>` generator .. |more_see_also| replace:: The :genex:`$<COMPILE_LANGUAGE:...>
<COMPILE_LANGUAGE:languages>` generator
expression is particularly useful for specifying a language-specific header expression is particularly useful for specifying a language-specific header
to precompile for only one language (e.g. ``CXX`` and not ``C``). In this to precompile for only one language (e.g. ``CXX`` and not ``C``). In this
case, header file names that are not explicitly in double quotes or angle case, header file names that are not explicitly in double quotes or angle
@@ -79,7 +80,7 @@ included by absolute path. For example:
brackets inside a generator expression, be sure to encode the closing brackets inside a generator expression, be sure to encode the closing
``>`` as :genex:`$<ANGLE-R>`. For example: ``>`` as :genex:`$<ANGLE-R>`. For example:
.. include:: include/GENEX_NOTE.rst .. include:: include/GENEX_NOTE.rst
:start-line: 1 :start-line: 2
.. code-block:: cmake .. code-block:: cmake

View File

@@ -1288,14 +1288,12 @@ related to most of the expressions in this sub-section.
.. versionadded:: 3.3 .. versionadded:: 3.3
The compile language of source files when evaluating compile options. The compile language of source files when evaluating compile options.
See :ref:`the related boolean expression See the related boolean expression
<Boolean COMPILE_LANGUAGE Generator Expression>` :genex:`$<COMPILE_LANGUAGE:languages> <COMPILE_LANGUAGE:languages>`
``$<COMPILE_LANGUAGE:language>``
for notes about the portability of this generator expression. for notes about the portability of this generator expression.
.. _`Boolean COMPILE_LANGUAGE Generator Expression`:
.. genex:: $<COMPILE_LANGUAGE:languages> .. genex:: $<COMPILE_LANGUAGE:languages>
:target: COMPILE_LANGUAGE:languages
.. versionadded:: 3.3 .. versionadded:: 3.3

View File

@@ -5,33 +5,51 @@
CheckCCompilerFlag CheckCCompilerFlag
------------------ ------------------
Check once whether the C compiler supports a given flag. This module provides a command to check whether the C compiler supports a
given flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckCCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_c_compiler_flag .. command:: check_c_compiler_flag
Checks once whether the C compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_c_compiler_flag(<flag> <resultVar>) check_c_compiler_flag(<flag> <variable>)
Check once that the ``<flag>`` is accepted by the compiler without a diagnostic. This command checks once that the ``<flag>`` is accepted by the C compiler
The result is stored in the internal cache variable specified by without producing a diagnostic message. Multiple flags can be specified
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for in one argument as a string using a :ref:`semicolon-separated list
failure. <CMake Language Lists>`.
``true`` indicates only that the compiler did not issue a diagnostic message The result of the check is stored in the internal cache variable specified
when given the flag. Whether the flag has any effect is beyond the scope of by ``<variable>``, with boolean true for success and boolean false for
this module. failure.
Internally, :command:`try_compile` is used to perform the check. If A successful result only indicates that the compiler did not report an
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), error when given the flag. Whether the flag has any effect, or the
the check compiles and links an executable program. If set to intended one, is outside the scope of this module.
``STATIC_LIBRARY``, the check is compiled but not linked.
See also :command:`check_compiler_flag` for a more general command syntax. .. note::
The compile and link commands can be influenced by setting any of the Since the underlying :command:`try_compile` command also uses flags from
following variables prior to calling ``check_c_compiler_flag()``. Unknown flags variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
in these variables can case a false negative result. flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -47,6 +65,37 @@ in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check support
for the C compiler flag ``-fno-optimize-strlen``, which disables
optimizations related to the ``strlen()`` C function in GCC and Clang
compilers. The result of the check is stored in the internal cache
variable ``HAVE_FNO_OPTIMIZE_STRLEN``, and the flag is conditionally enabled
using the :command:`target_compile_options` command. The
:genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>` generator
expression ensures that the flag is added only to ``C`` source files.
.. code-block:: cmake
include(CheckCCompilerFlag)
check_c_compiler_flag(-fno-optimize-strlen HAVE_FNO_OPTIMIZE_STRLEN)
if(HAVE_FNO_OPTIMIZE_STRLEN)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:C>:-fno-optimize-strlen>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckCompilerFlag` module for a more general command to check
whether a compiler flag is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -5,33 +5,51 @@
CheckCXXCompilerFlag CheckCXXCompilerFlag
------------------------ ------------------------
Check once whether the CXX compiler supports a given flag. This module provides a command to check whether the C++ compiler supports a
given flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckCXXCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_cxx_compiler_flag .. command:: check_cxx_compiler_flag
Checks once whether the C++ compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_cxx_compiler_flag(<flag> <resultVar>) check_cxx_compiler_flag(<flag> <variable>)
Check once that the ``<flag>`` is accepted by the compiler without a diagnostic. This command checks once that the ``<flag>`` is accepted by the ``CXX``
The result is stored in the internal cache variable specified by compiler without producing a diagnostic message. Multiple flags can be
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for specified in one argument as a string using a :ref:`semicolon-separated
failure. list <CMake Language Lists>`.
``true`` indicates only that the compiler did not issue a diagnostic message The result of the check is stored in the internal cache variable specified
when given the flag. Whether the flag has any effect is beyond the scope of by ``<variable>``, with boolean true for success and boolean false for
this module. failure.
Internally, :command:`try_compile` is used to perform the check. If A successful result only indicates that the compiler did not report an
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), error when given the flag. Whether the flag has any effect, or the
the check compiles and links an executable program. If set to intended one, is outside the scope of this module.
``STATIC_LIBRARY``, the check is compiled but not linked.
See also :command:`check_compiler_flag` for a more general command syntax. .. note::
The compile and link commands can be influenced by setting any of the Since the underlying :command:`try_compile` command also uses flags from
following variables prior to calling ``check_cxx_compiler_flag()``. Unknown flags variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
in these variables can case a false negative result. flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -46,6 +64,36 @@ in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_LINK_DIRECTORIES.rst .. include:: /module/include/CMAKE_REQUIRED_LINK_DIRECTORIES.rst
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check
the C++ compiler flag ``-fsycl``. The result of the check is stored in the
internal cache variable ``HAVE_FSYCL_FLAG``, and the flag is conditionally
enabled using the :command:`target_compile_options` command. The
:genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>` generator
expression ensures that the flag is added only to ``CXX`` source files.
.. code-block:: cmake
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-fsycl HAVE_FSYCL_FLAG)
if(HAVE_FSYCL_FLAG)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fsycl>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckCompilerFlag` module for a more general command to check
whether a compiler flag is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -7,31 +7,68 @@ CheckCompilerFlag
.. versionadded:: 3.19 .. versionadded:: 3.19
Check once whether the ``<lang>`` compiler supports a given flag. This module provides a command to check whether the compiler supports a given
flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_compiler_flag .. command:: check_compiler_flag
Checks once whether the compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_compiler_flag(<lang> <flag> <resultVar>) check_compiler_flag(<lang> <flag> <variable>)
Check once that the ``<flag>`` is accepted by the ``<lang>`` compiler without This command checks once that the ``<flag>`` is accepted by the ``<lang>``
a diagnostic. The result is stored in the internal cache variable specified by compiler without producing a diagnostic message. The result of the check
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for is stored in the internal cache variable specified by ``<variable>``.
failure.
``true`` indicates only that the compiler did not issue a diagnostic message The arguments are:
when given the flag. Whether the flag has any effect is beyond the scope of
this module.
Internally, :command:`try_compile` is used to perform the check. If ``<lang>``
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), The language of the compiler used for the check. Supported languages
the check compiles and links an executable program. If set to are: ``C``, ``CXX``, ``CUDA``, ``Fortran``, ``HIP``, ``ISPC``, ``OBJC``,
``STATIC_LIBRARY``, the check is compiled but not linked. and ``OBJCXX``, and ``Swift``.
The compile and link commands can be influenced by setting any of the .. versionadded:: 3.21
following variables prior to calling ``check_compiler_flag()``. Unknown flags Support for ``HIP`` language.
in these variables can case a false negative result.
.. versionadded:: 3.26
Support for ``Swift`` language.
``<flag>``
Compiler flag(s) to check. Multiple flags can be specified in one
argument as a string using a :ref:`semicolon-separated list
<CMake Language Lists>`.
``<variable>``
Variable name of an internal cache variable to store the result of the
check, with boolean true for success and boolean false for failure.
A successful result only indicates that the compiler did not report an
error when given the flag. Whether the flag has any effect, or the
intended one, is outside the scope of this module.
.. note::
Since the underlying :command:`try_compile` command also uses flags from
variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -47,6 +84,37 @@ in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check support
for the C compiler flag ``-fno-optimize-strlen``, which disables
optimizations related to the ``strlen()`` C function in GCC and Clang
compilers. The result of the check is stored in the internal cache
variable ``HAVE_FNO_OPTIMIZE_STRLEN``, and the flag is conditionally enabled
using the :command:`target_compile_options` command. The
:genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>` generator
expression ensures that the flag is added only to ``C`` source files.
.. code-block:: cmake
include(CheckCompilerFlag)
check_compiler_flag(C -fno-optimize-strlen HAVE_FNO_OPTIMIZE_STRLEN)
if(HAVE_FNO_OPTIMIZE_STRLEN)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:C>:-fno-optimize-strlen>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckLinkerFlag` module to check whether a linker flag is
supported by the compiler.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -7,33 +7,51 @@ CheckFortranCompilerFlag
.. versionadded:: 3.3 .. versionadded:: 3.3
Check once whether the Fortran compiler supports a given flag. This module provides a command to check whether the Fortran compiler supports
a given flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckFortranCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_fortran_compiler_flag .. command:: check_fortran_compiler_flag
Checks once whether the Fortran compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_fortran_compiler_flag(<flag> <resultVar>) check_fortran_compiler_flag(<flag> <variable>)
Check once that the ``<flag>`` is accepted by the compiler without a diagnostic. This command checks once that the ``<flag>`` is accepted by the Fortran
The result is stored in the internal cache variable specified by compiler without producing a diagnostic message. Multiple flags can be
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for specified in one argument as a string using a :ref:`semicolon-separated list
failure. <CMake Language Lists>`.
``true`` indicates only that the compiler did not issue a diagnostic message The result of the check is stored in the internal cache variable specified
when given the flag. Whether the flag has any effect is beyond the scope of by ``<variable>``, with boolean true for success and boolean false for
this module. failure.
Internally, :command:`try_compile` is used to perform the check. If A successful result only indicates that the compiler did not report an
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), error when given the flag. Whether the flag has any effect, or the
the check compiles and links an executable program. If set to intended one, is outside the scope of this module.
``STATIC_LIBRARY``, the check is compiled but not linked.
See also :command:`check_compiler_flag` for a more general command syntax. .. note::
The compile and link commands can be influenced by setting any of the Since the underlying :command:`try_compile` command also uses flags from
following variables prior to calling ``check_fortran_compiler_flag()``. Unknown variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
flags in these variables can case a false negative result. flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -49,6 +67,36 @@ flags in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check
the Fortran compiler flag ``-fallow-argument-mismatch``. The result of the
check is stored in the internal cache variable ``HAVE_FORTRAN_FLAG``, and
the flag is conditionally enabled using the :command:`target_compile_options`
command. The :genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>`
generator expression ensures that the flag is added only to ``Fortran``
source files.
.. code-block:: cmake
include(CheckFortranCompilerFlag)
check_fortran_compiler_flag(-fallow-argument-mismatch HAVE_FORTRAN_FLAG)
if(HAVE_FORTRAN_FLAG)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckCompilerFlag` module for a more general command to check
whether a compiler flag is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -142,6 +142,8 @@ See Also
* The :variable:`CMAKE_LINKER_TYPE` variable to specify the linker, which * The :variable:`CMAKE_LINKER_TYPE` variable to specify the linker, which
will be used also by this module. will be used also by this module.
* The :module:`CheckCompilerFlag` module to check whether a compiler flag
is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -7,33 +7,51 @@ CheckOBJCCompilerFlag
.. versionadded:: 3.16 .. versionadded:: 3.16
Check once whether the Objective-C compiler supports a given flag. This module provides a command to check whether the Objective-C compiler
supports a given flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckOBJCCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_objc_compiler_flag .. command:: check_objc_compiler_flag
Checks once whether the Objective-C compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_objc_compiler_flag(<flag> <resultVar>) check_objc_compiler_flag(<flag> <variable>)
Check once that the ``<flag>`` is accepted by the compiler without a diagnostic. This command checks once that the ``<flag>`` is accepted by the ``OBJC``
The result is stored in the internal cache variable specified by compiler without producing a diagnostic message. Multiple flags can be
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for specified in one argument as a string using a
failure. :ref:`semicolon-separated list <CMake Language Lists>`.
``true`` indicates only that the compiler did not issue a diagnostic message The result of the check is stored in the internal cache variable specified
when given the flag. Whether the flag has any effect is beyond the scope of by ``<variable>``, with boolean true for success and boolean false for
this module. failure.
Internally, :command:`try_compile` is used to perform the check. If A successful result only indicates that the compiler did not report an
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), error when given the flag. Whether the flag has any effect, or the
the check compiles and links an executable program. If set to intended one, is outside the scope of this module.
``STATIC_LIBRARY``, the check is compiled but not linked.
See also :command:`check_compiler_flag` for a more general command syntax. .. note::
The compile and link commands can be influenced by setting any of the Since the underlying :command:`try_compile` command also uses flags from
following variables prior to calling ``check_objc_compiler_flag()``. Unknown variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
flags in these variables can case a false negative result. flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -49,6 +67,35 @@ flags in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check the
Objective-C compiler flag ``-fobjc-arc``. The result of the check is
stored in the internal cache variable ``HAVE_OBJC_ARC``, and the flag is
conditionally enabled using the :command:`target_compile_options` command.
The :genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>` generator
expression ensures that the flag is added only to ``OBJC`` source files.
.. code-block:: cmake
include(CheckOBJCCompilerFlag)
check_objc_compiler_flag(-fobjc-arc HAVE_OBJC_ARC)
if(HAVE_OBJC_ARC)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:OBJC>:-fobjc-arc>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckCompilerFlag` module for a more general command to check
whether a compiler flag is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -7,33 +7,51 @@ CheckOBJCXXCompilerFlag
.. versionadded:: 3.16 .. versionadded:: 3.16
Check once whether the Objective-C++ compiler supports a given flag. This module provides a command to check whether the Objective-C++ compiler
supports a given flag.
Load this module in a CMake project with:
.. code-block:: cmake
include(CheckOBJCXXCompilerFlag)
Commands
^^^^^^^^
This module provides the following command:
.. command:: check_objcxx_compiler_flag .. command:: check_objcxx_compiler_flag
Checks once whether the Objective-C++ compiler supports a given flag:
.. code-block:: cmake .. code-block:: cmake
check_objcxx_compiler_flag(<flag> <resultVar>) check_objcxx_compiler_flag(<flag> <variable>)
Check once that the ``<flag>`` is accepted by the compiler without a diagnostic. This command checks once that the ``<flag>`` is accepted by the ``OBJCXX``
The result is stored in the internal cache variable specified by compiler without producing a diagnostic message. Multiple flags can be
``<resultVar>``, with boolean ``true`` for success and boolean ``false`` for specified in one argument as a string using a
failure. :ref:`semicolon-separated list <CMake Language Lists>`.
``true`` indicates only that the compiler did not issue a diagnostic message The result of the check is stored in the internal cache variable specified
when given the flag. Whether the flag has any effect is beyond the scope of by ``<variable>``, with boolean true for success and boolean false for
this module. failure.
Internally, :command:`try_compile` is used to perform the check. If A successful result only indicates that the compiler did not report an
:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``EXECUTABLE`` (default), error when given the flag. Whether the flag has any effect, or the
the check compiles and links an executable program. If set to intended one, is outside the scope of this module.
``STATIC_LIBRARY``, the check is compiled but not linked.
See also :command:`check_compiler_flag` for a more general command syntax. .. note::
The compile and link commands can be influenced by setting any of the Since the underlying :command:`try_compile` command also uses flags from
following variables prior to calling ``check_objcxx_compiler_flag()``. Unknown variables like :variable:`CMAKE_<LANG>_FLAGS`, unknown or unsupported
flags in these variables can case a false negative result. flags in those variables may result in a false negative for this check.
.. rubric:: Variables Affecting the Check
The following variables may be set before calling this command to modify
the way the check is run:
.. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst .. include:: /module/include/CMAKE_REQUIRED_FLAGS.rst
@@ -49,6 +67,35 @@ flags in these variables can case a false negative result.
.. include:: /module/include/CMAKE_REQUIRED_QUIET.rst .. include:: /module/include/CMAKE_REQUIRED_QUIET.rst
.. include:: /module/include/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
Examples
^^^^^^^^
The following example demonstrates how to use this module to check the
Objective-C++ compiler flag ``-fobjc-arc``. The result of the check is
stored in the internal cache variable ``HAVE_OBJC_ARC``, and the flag is
conditionally enabled using the :command:`target_compile_options` command.
The :genex:`$<COMPILE_LANGUAGE:...> <COMPILE_LANGUAGE:languages>` generator
expression ensures that the flag is added only to ``OBJCXX`` source files.
.. code-block:: cmake
include(CheckOBJCXXCompilerFlag)
check_objcxx_compiler_flag(-fobjc-arc HAVE_OBJC_ARC)
if(HAVE_OBJC_ARC)
target_compile_options(
example
PRIVATE $<$<COMPILE_LANGUAGE:OBJCXX>:-fobjc-arc>
)
endif()
See Also
^^^^^^^^
* The :module:`CheckCompilerFlag` module for a more general command to check
whether a compiler flag is supported.
#]=======================================================================] #]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)

View File

@@ -93,7 +93,7 @@ endif()
unset(Fortran_BOGUS_FLAG CACHE) unset(Fortran_BOGUS_FLAG CACHE)
include(CheckFortranCompilerFlag) include(CheckFortranCompilerFlag)
CHECK_Fortran_COMPILER_FLAG(-_this_is_not_a_flag_ Fortran_BOGUS_FLAG) check_fortran_compiler_flag(-_this_is_not_a_flag_ Fortran_BOGUS_FLAG)
if (Fortran_BOGUS_FLAG) if (Fortran_BOGUS_FLAG)
message(SEND_ERROR "CHECK_Fortran_COMPILER_FLAG() succeeded, but should have failed") message(SEND_ERROR "CHECK_Fortran_COMPILER_FLAG() succeeded, but should have failed")
endif() endif()