2017-02-19 10 views
0

Что-то очень странное происходит со мной: CMake не может выбрать правильную версию g ++ только если я скомпилирую проект в первый раз (или я удаляю папку 'build'), ,CMake не удается идентифицировать версию компилятора C++ в новых сборках

Итак, «свежая» компиляция приносит, но если я скомпилирую ее снова, все будет гладко (пока я не удалю папку «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" 

Спасибо заранее,

Эдуардо

+0

Я действительно не понимаю, зачем вам этот сценарий оболочки для начала. –

+0

@BaummitAugen, чтобы иметь возможность компилировать и запускать файл с помощью простого './Compile.sh', не беспокоясь о его имени. – eduherminio

ответ

1

не может реально помочь вам с фактической ошибкой, НО ...

Почему вы используете набор -e? Вы не должны пропускать ошибки, вы должны их исправить ...

Ваш CMakeLists.txt также неверно структурирован. Вы должны на первых же линиях:

cmake_minimum_required(VERSION 2.8) 
project(filename) 

В противном случае это считается неправильным. Это может сработать, но это не должно. Перед запуском команд CMake вам нужно указать, какая версия требуется для запуска файла.

Ваши записи SOURCES должны иметь двойные кавычки вокруг них.

ОБНОВЛЕНИЕ

Оказывается положить cmake_minimum_requirement (версии 2.8) первый фиксированный его для ОП. После этого в CMake структурно не требуется много, вы можете использовать свой здравый смысл для остальных, но сначала требуется требование к версии.

+0

мм Я использовал 'set -e' для выхода из сценария оболочки, если какие-либо последующие команды терпят неудачу. Возможно ли разместить 'project (filename)' before' set (имя файла $ ENV {env_filename}) '? – eduherminio

+0

О, ну, забыл комплект set -e работает в обратном порядке, что я всегда думаю ... lol. И нет, это не так, но я 99.9999% уверен, что вы можете просто использовать проект ($ ENV {env_filename}) напрямую, вместо того, чтобы создавать ненужную переменную. –

+0

И заменив 'add_executable ($ {filename} $ {filename} .cpp $ {SOURCES})' с 'add_executable ($ ENV {env_filename} $ ENV {env_filename} .cpp $ {SOURCES})'? Стоит ли читать env. переменная три раза вместо создания переменной? – eduherminio