[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