C++ CMake无法识别C++;新版本中的编译器版本

C++ CMake无法识别C++;新版本中的编译器版本,c++,c++11,compilation,cmake,c++14,C++,C++11,Compilation,Cmake,C++14,我身上发生了一件非常奇怪的事情:只有在我第一次编译项目(或删除“build”文件夹)时,CMake才能选择正确版本的g++ 因此,使用auto时,“新”编译会带来错误,但如果我再次编译它,一切都会顺利进行(直到我删除“build”文件夹) 这是我的文件: CMakeLists.txt file(GLOB_RECURSE SOURCES include/*.h src/*.cpp ) SET(CMAKE_CXX_FLAGS "-std=c++14") set(filename

我身上发生了一件非常奇怪的事情:只有在我第一次编译项目(或删除“build”文件夹)时,CMake才能选择正确版本的g++

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

这是我的文件:

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})
compile.sh

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

filename="1_Example"
提前感谢,


爱德华多不能真正帮助你解决实际的错误,但是

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

您的CMakeLists.txt的结构也不正确。在第一行中,您应该具备:

cmake_minimum_required(VERSION 2.8)
project( filename )
否则它被认为是不正确的。这可能有用,但不应该。在运行CMake命令之前,必须指定运行文件所需的版本

您的源条目周围应该有双引号

更新


事实证明,首先将cmake_最低要求(2.8版)用于OP。在这一点之后,cmake在结构上不需要太多要求,其余部分可以使用您的常识,但是必须首先满足版本要求。

我真的不明白为什么您需要这个shell脚本。@BaummitAugen能够用一个简单的
/compile.sh
编译并运行一个文件,而不必担心它的名称。如果任何后续命令失败,我正在使用
set-e
退出shell脚本。是否可以将
项目(文件名)
放在
集合(文件名$ENV{ENV_filename})
之前?哦,对了,忘记了集合-e的工作原理与我一直认为的相反。。。哈哈。不,这不是,但我99.9999%确信你可以直接使用project($ENV{ENV_filename}),而不是创建一个不必要的变量。并将
add_可执行文件(${filename}${filename}.cpp${SOURCES})
替换为
add_可执行文件($ENV{ENV_filename}$$ENV_filename}.cpp${SOURCES})
?值得一读《环境》吗。变量三次,而不是创建一个变量?你可以使用变量${project_name}访问项目名称没有问题:)我在进入CMake时也遇到了一些重大问题,但一旦你有了那个好时机,一旦你习惯了使用文档,你就会发现它是一个了不起的开发工具。