【问题标题】:CMake fails identifying C++ compiler version in new buildsCMake 无法识别新版本中的 C++ 编译器版本
【发布时间】:2017-02-19 23:03:02
【问题描述】:

发生了一件很奇怪的事情:CMake 无法选择正确的 g++ 版本只有如果我第一次编译项目(或者我删除了“build”文件夹)。

因此,在使用 auto 时,“新”编译会带来错误,但如果我再次编译,一切都会顺利进行(直到我删除“构建”文件夹)。

这是我的文件:

CMakeLists.txt

file(GLOB_RECURSE SOURCES
    include/*.h
    src/*.cpp
)

SET(CMAKE_CXX_FLAGS "-std=c++14")

set(filename $ENV{env_filename})

cmake_minimum_required(VERSION 2.8)
project( filename )
add_executable( ${filename} ${filename}.cpp ${SOURCES})

编译.sh

#!/bin/bash
clear
set -e
source filedata.txt
export env_filename=$filename
mkdir -p build && cd build
cmake ..  &> /dev/null
make -B
./$filename

文件数据.txt

filename="1_Example"

提前致谢,

爱德华多

【问题讨论】:

  • 我真的不明白你为什么需要这个 shell 脚本。
  • @BaummitAugen 能够使用简单的./compile.sh 编译和运行文件,而无需担心其名称。

标签: c++ c++11 compilation cmake c++14


【解决方案1】:

无法真正帮助您解决实际错误,但是...

为什么要使用 set -e?你不应该跳过错误,你应该修复它们......

您的 CMakeLists.txt 的结构也有误。你应该在第一行有:

cmake_minimum_required(VERSION 2.8)
project( filename )

否则将被视为不正确。它可能有效,但不应该。在运行 CMake 命令之前,您必须指定运行文件所需的版本。

您的 SOURCES 条目应该有双引号。

更新

事实证明,首先将 cmake_minimum_requirement(VERSION 2.8) 修复为 OP。在那之后,在 CMake 中对结构的要求并不高,其余部分您可以使用您的常识,但首先必须有版本要求。

【讨论】:

  • mm 如果任何后续命令失败,我使用set -e 退出 shell 脚本。是否可以将project( filename ) 放在set(filename $ENV{env_filename}) 之前?
  • 哦,对了,忘了 set -e 的作用与我一直认为的相反……哈哈。不,不是,但我 99.9999% 确信您可以直接使用 project($ENV{env_filename}) 而不是创建不必要的变量。
  • 并将add_executable( ${filename} ${filename}.cpp ${SOURCES}) 替换为add_executable( $ENV{env_filename} $ENV{env_filename}.cpp ${SOURCES}) ?是否值得阅读环境。变量三次而不是创建一个变量?
  • 您可以使用变量 ${PROJECT_NAME} 访问项目名称
  • 没问题 :) 我在进入 CMake 时也遇到了一些重大问题,但是一旦你有那个时刻,一旦你习惯了使用文档 cmake.org/cmake/help/v3.6/genindex.html,你会发现它是一个了不起的工具发展。
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2021-10-01
  • 2018-12-14
  • 1970-01-01
相关资源
最近更新 更多