首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAKE_COMPILER_IS_GNUCXX和CMAKE_CXX_COMPILER_ID为空

CMAKE_COMPILER_IS_GNUCXX和CMAKE_CXX_COMPILER_ID为空
EN

Stack Overflow用户
提问于 2014-01-03 13:36:45
回答 2查看 14.5K关注 0票数 12

我目前正在使用CMake,并希望检测编译器和编译器版本。我当前的CMakeLists.txt如下所示:

代码语言:javascript
复制
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-branch )。

问题是,CMAKE_CXX_COMPILER_IDCMAKE_COMPILER_IS_GNUCXX都是空的(CMAKE_CXX_COMPILER不是)。

我正在使用Microsoft 8 (6.3.9600)操作系统和MinGW,更详细地介绍以下工具。

正如您可以在屏幕截图中一样,我使用NetBeans IDE来简化整个构建过程。

所以我的问题是:

  1. 上述变量为空的可能原因是什么?
  2. 我的问题有什么解决办法吗?

如果您看到我的(简单) CMakeLists.txt文件有任何其他问题,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-03 13:59:59

将它放在后,放在 project命令之后:

代码语言:javascript
复制
> 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
票数 20
EN

Stack Overflow用户

发布于 2014-01-03 13:42:33

它可能会帮助您告诉CMake这是一个C++项目。要做到这一点,您可以在project命令中这样说:

代码语言:javascript
复制
project ($(PROJECT) CXX)
#                   ^^^
# Note project type

您也可能希望在检查变量之前执行此操作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20904914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档