Компилятор CMAKE-это GNUCXX, а идентификатор компилятора CMAKE CXX пуст

в настоящее время я играл вокруг с CMake и хотите обнаружить компилятор и версию компилятора. Мой текущий CMakeLists.txt выглядит следующим образом:

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})

файл в порядке, и я могу успешно очистить, построить и запустить приложение cli с этим файлом (если я прокомментирую else - ветвь проверки компилятора).

проблема в том, что оба CMAKE_CXX_COMPILER_ID и CMAKE_COMPILER_IS_GNUCXX пустые (CMAKE_CXX_COMPILER нет).

Я использую Microsoft Windows 8 (6.3.9600) операционная система и MinGW, более подробно следующие инструменты.

Versions of tools used

как вы можете на скриншоте, я использую IDE NetBeans чтобы упростить весь прогресс сборки.

Итак, мои вопросы:

  1. каковы возможные причины того, что упомянутые переменные пусты?
  2. существует ли обходной путь для моей проблемы?

и, пожалуйста, дайте мне знать, если вы видите любые другие проблемы с my (simple) .

2 ответов


поместить его после :

> 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

Это может помогите вам сказать CMake, что это проект на C++. Чтобы сделать это, вы говорите это в :

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

вы также можете сделать это перед проверкой переменной.