mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 13:20:47 -06:00
This change was originally made by commit74b1c9fc8e(Explicitly specify language flag when source LANGUAGE property is set, 2020-06-01, v3.19.0-rc1~722^2), but it was reverted by commit30aa715fac(Revert "specify language flag when source LANGUAGE property is set", 2020-11-19) to restore compatibility with pre-3.19 behavior. Implement the change again, but add policy CMP0119 to make this change while preserving compatibility with existing projects. Note that the `Compiler/{Clang,Intel,MSVC}-CXX` modules do not need to specify `-TP` for their MSVC-like variants because we already use the flag in `CMAKE_CXX_COMPILE_OBJECT`. Similarly for `Compiler/XL-CXX` and `Platform/Windows-Embarcadero`. Note also that this does not seem possible to implement for XL C. Even with `-qsourcetype=c`, `xlc` complains about an unknown suffix: `1501-218 (W) file /.../AltExtC.zzz contains an incorrect file suffix`. It returns non-zero even with `-qsuppress=1501-218`. Co-Author: Robert Maynard <robert.maynard@kitware.com> Fixes: #14516, #20716
37 lines
1.7 KiB
ReStructuredText
37 lines
1.7 KiB
ReStructuredText
CMP0119
|
|
-------
|
|
|
|
.. versionadded:: 3.20
|
|
|
|
:prop_sf:`LANGUAGE` source file property explicitly compiles as specified
|
|
language.
|
|
|
|
The :prop_sf:`LANGUAGE` source file property is documented to mean that the
|
|
source file is written in the specified language. In CMake 3.19 and below,
|
|
setting this property causes CMake to compile the source file using the
|
|
compiler for the specified language. However, it only passes an explicit
|
|
flag to tell the compiler to treat the source as the specified language
|
|
for MSVC-like, XL, and Embarcadero compilers for the ``CXX`` language.
|
|
CMake 3.20 and above prefer to also explicitly tell the compiler to use
|
|
the specified language using a flag such as ``-x c`` on all compilers
|
|
for which such flags are known.
|
|
|
|
This policy provides compatibility for projects that have not been updated
|
|
to expect this behavior. For example, some projects were setting the
|
|
``LANGUAGE`` property to ``C`` on assembly-language ``.S`` source files
|
|
in order to compile them using the C compiler. Such projects should be
|
|
updated to use ``enable_language(ASM)``, for which CMake will often choose
|
|
the C compiler as the assembler on relevant platforms anyway.
|
|
|
|
The ``OLD`` behavior for this policy is to interpret the ``LANGUAGE <LANG>``
|
|
property using its undocumented meaning to "use the ``<LANG>`` compiler".
|
|
The ``NEW`` behavior for this policy is to interpret the ``LANGUAGE <LANG>``
|
|
property using its documented meaning to "compile as a ``<LANG>`` source".
|
|
|
|
This policy was introduced in CMake version 3.20. Use the
|
|
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
|
|
Unlike many policies, CMake version |release| does *not* warn
|
|
when this policy is not set and simply uses ``OLD`` behavior.
|
|
|
|
.. include:: DEPRECATED.txt
|