[cmake-developers] [CMake 0015897]: Clang CXX feature detection disabled on WIN32 platforms
Mantis Bug Tracker
mantis at public.kitware.com
Fri Jan 1 10:10:47 EST 2016
The following issue has been SUBMITTED.
======================================================================
https://cmake.org/Bug/view.php?id=15897
======================================================================
Reported By: Paul "TBBle" Hampson
Assigned To:
======================================================================
Project: CMake
Issue ID: 15897
Category: CMake
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2016-01-02 02:10 AEDT
Last Modified: 2016-01-02 02:10 AEDT
======================================================================
Summary: Clang CXX feature detection disabled on WIN32
platforms
Description:
When using clang from mingw64 under msys, the supplied repro case fails with:
CMake Error at CMakeLists.txt:12 (target_compile_features):
target_compile_features no known features for CXX compiler
"Clang"
version 3.7.0.
This is because when Clang C++ feature detection support was added in
https://cmake.org/gitweb?p=cmake.git;a=commit;h=cda233194f9caab8867b2451f3d859080a233d45
(specifically Modules/Compiler/Clang-CXX.cmake, although
Modules/Compiler/Clang-C.cmake has the same conditions) the following was done:
* The condition to bail out detecting a -std= flag for clang was expanded to
also cover WIN32 (This breaks the CXX_STANDARD property) - line 9
* If not UNIX, no compiler features are recorded (This breaks
target_compile_features) - line 52
It's not clear why these conditions were used, perhaps there's some interaction
with clang-cl (Clang emulating MSVC)?
If that was the case, then the first condition should be changed to test that,
as done earlier in the file, rather than blocking all WIN32-based clang
compilers.
Steps to Reproduce:
Given CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
project(test1 CXX)
# Globally C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
file(WRITE test1.cpp "int main(int argc, char** argv) {auto x=argc; return x;}")
add_executable(test1 test1.cpp)
target_compile_features(test1 PRIVATE cxx_auto_type)
Running the following in the MINGW64 environment of msys2 works:
CXX=g++ cmake .. -G"MSYS Makefiles" && cmake --build .
but the following fails to generate:
CXX=clang++ cmake .. -G"MSYS Makefiles" && cmake --build .
If the target_compile_features directive is removed, then both generate, but the
latter will fail to build, noting that 'auto' is a C++11 feature.
Test based on https://cmake.org/pipermail/cmake/2015-January/059593.html
Additional Information:
I tested that removing the WIN32 and UNIX parts of the conditionals I mentioned
got MSYS working, but I don't happen to have clang-cl installed to verify that
it wasn't broken by doing this.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2016-01-02 02:10 Paul "TBBle" HampsonNew Issue
======================================================================
More information about the cmake-developers
mailing list