简体   繁体   中英

CMAKE_COMPILER_IS_GNUCXX and CMAKE_CXX_COMPILER_ID are empty

I am currently playing around with CMake and want to detect the compiler and the compiler version. My current CMakeLists.txt looks as follows:

cmake_minimum_required (VERSION 2.6)

set (PROJECT "a_tour_of_c++")
set (GNUCXX_MINIMUM_VERSION "4.8")
set (CXX_STANDARD "c++11")

message ("${CMAKE_CXX_COMPILER}")       # C:/dev/MinGW/bin/g++.exe
message ("${CMAKE_CXX_COMPILER_ID}")    # EMPTY
message ("${CMAKE_COMPILER_IS_GNUCXX}") # EMPTY

if (CMAKE_COMPILER_IS_GNUCXX)
  if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS GNUCXX_MINIMUM_VERSION)
    message (FATAL_ERROR "GCC version must be at least ${GNUCXX_MINIMUM_VERSION}!")
  endif()
else()
  message (FATAL_ERROR "Invalid compiler!")
endif()

set (BUILD_DIR build)
set (HEADER_DIR include)
set (SOURCE_DIR src)
set (MAIN_FILE ${SOURCE_DIR}/main.cc)

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${CXX_STANDARD}")
project ($(PROJECT))
include_directories (${HEADER_DIR})
add_executable (${BUILD_DIR}/${PROJECT} ${MAIN_FILE})

The file is fine and I can sucessfully clean, build and run my cli application with this file (if I comment out the else -branch of the compiler check).

The problem is, that both CMAKE_CXX_COMPILER_ID and CMAKE_COMPILER_IS_GNUCXX are empty ( CMAKE_CXX_COMPILER is not).

I am using a Microsoft Windows 8 (6.3.9600) operating system and MinGW , more detailed the following tools.

使用的工具版本

As you can in the screenshot, I use NetBeans IDE to simplify the whole build progress.

So my questions are:

  1. What are possible reasons, that the mentioned variables are empty?
  2. Does any workaround exist for my problem?

And please let me know, if you see any other problems with my (simple) CMakeLists.txt file.

Place it after project command:

> cat CMakeLists.txt 
cmake_minimum_required(VERSION 2.8)

message("before:")
message(">    ${CMAKE_CXX_COMPILER}")
message(">    ${CMAKE_CXX_COMPILER_ID}")
message(">    ${CMAKE_COMPILER_IS_GNUCXX}")
message("-----------------")

project(Foo)

message("after:")
message(">    ${CMAKE_CXX_COMPILER}")
message(">    ${CMAKE_CXX_COMPILER_ID}")
message(">    ${CMAKE_COMPILER_IS_GNUCXX}")
message("-----------------")

> cmake -H. -B_builds
before:
>    
>    
>    
-----------------
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
after:
>    /usr/bin/c++
>    GNU
>    1
-----------------
-- Configuring done
-- Generating done
-- Build files have been written to: /.../_builds

It might help you tell CMake that this is a C++ project. To do it you say it in the project command:

project ($(PROJECT) CXX)
#                   ^^^
# Note project type

You might also want to do it before checking the variable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM