Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Cmake不';t在Travis CI服务器上设置编译器语言标准_C++_Cmake_Travis Ci - Fatal编程技术网

C++ C++;Cmake不';t在Travis CI服务器上设置编译器语言标准

C++ C++;Cmake不';t在Travis CI服务器上设置编译器语言标准,c++,cmake,travis-ci,C++,Cmake,Travis Ci,我正在开发一个自己的开源编程语言解释器项目,我可能会犯一些愚蠢的错误,因为我在Cmake方面不够成熟,我第一次尝试Travis CI。我的项目在我的PC(运行Ubuntu16.04LTS、GCC 8.1和Cmake 3.12.0-rc2)上通过执行scripts/build\u all.sh从bash终端编译,测试由scripts/run\u tests.sh执行。 构建脚本创建一个cmake Build debug目录,运行cmake和than builds,并执行简单的cmake Build

我正在开发一个自己的开源编程语言解释器项目,我可能会犯一些愚蠢的错误,因为我在
Cmake
方面不够成熟,我第一次尝试
Travis CI
。我的项目在我的
PC
(运行
Ubuntu16.04LTS
GCC 8.1
Cmake 3.12.0-rc2
)上通过执行
scripts/build\u all.sh
从bash终端编译,测试由
scripts/run\u tests.sh
执行。 构建脚本创建一个
cmake Build debug
目录,运行cmake和than builds,并执行简单的
cmake Build debug/lexertl\u gen/lexert\u gen.out
程序,在my
include
文件夹中为主项目生成头文件。之后,它将在编译选项
std=gnu++2a
下构建主项目及其测试

以下是我所有的
CMakeLists.txt
(问题如下所述):

根CMakeLists.txt

cmake_minimum_required(VERSION 3.9.0)

set(INCLUDE_ROOT "/usr/local/include")
set(BOOST_ROOT   "${INCLUDE_ROOT}/boost_1_67_0")
set(LEXERTL_ROOT "${INCLUDE_ROOT}/lexertl")
set(GTEST_ROOT   "${INCLUDE_ROOT}/googletest")

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

file(GLOB SOURCES "src/*.cpp")
include_directories(include ${BOOST_ROOT} ${LEXERTL_ROOT} ${GTEST_ROOT})

add_library(calamity_core ${SOURCES})

    project(lexer.out)
    add_executable(${PROJECT_NAME} main_lexer.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(parser.out)
    add_executable(${PROJECT_NAME} main_parser.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(tests.out)
    add_subdirectory(tests)

    project(lexertl_gen.out)
    add_subdirectory(lexertl_gen)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

add_subdirectory(/usr/local/include/googletest ../gtets-build)

add_executable(${PROJECT_NAME} tests.cpp)
target_link_libraries(${PROJECT_NAME} gtest gtest_main gmock calamity_core)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

set(SOURCES ../src/token.cpp
            ../src/var_substring.cpp
            ../src/cui.cpp
            ../src/message_exception.cpp)

add_executable(lexertl_gen.out main_lexertl_gen.cpp ${SOURCES})
测试/CMakeLists.txt

cmake_minimum_required(VERSION 3.9.0)

set(INCLUDE_ROOT "/usr/local/include")
set(BOOST_ROOT   "${INCLUDE_ROOT}/boost_1_67_0")
set(LEXERTL_ROOT "${INCLUDE_ROOT}/lexertl")
set(GTEST_ROOT   "${INCLUDE_ROOT}/googletest")

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

file(GLOB SOURCES "src/*.cpp")
include_directories(include ${BOOST_ROOT} ${LEXERTL_ROOT} ${GTEST_ROOT})

add_library(calamity_core ${SOURCES})

    project(lexer.out)
    add_executable(${PROJECT_NAME} main_lexer.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(parser.out)
    add_executable(${PROJECT_NAME} main_parser.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(tests.out)
    add_subdirectory(tests)

    project(lexertl_gen.out)
    add_subdirectory(lexertl_gen)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

add_subdirectory(/usr/local/include/googletest ../gtets-build)

add_executable(${PROJECT_NAME} tests.cpp)
target_link_libraries(${PROJECT_NAME} gtest gtest_main gmock calamity_core)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

set(SOURCES ../src/token.cpp
            ../src/var_substring.cpp
            ../src/cui.cpp
            ../src/message_exception.cpp)

add_executable(lexertl_gen.out main_lexertl_gen.cpp ${SOURCES})
lexertl\u gen/CMakeLists.txt

cmake_minimum_required(VERSION 3.9.0)

set(INCLUDE_ROOT "/usr/local/include")
set(BOOST_ROOT   "${INCLUDE_ROOT}/boost_1_67_0")
set(LEXERTL_ROOT "${INCLUDE_ROOT}/lexertl")
set(GTEST_ROOT   "${INCLUDE_ROOT}/googletest")

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

file(GLOB SOURCES "src/*.cpp")
include_directories(include ${BOOST_ROOT} ${LEXERTL_ROOT} ${GTEST_ROOT})

add_library(calamity_core ${SOURCES})

    project(lexer.out)
    add_executable(${PROJECT_NAME} main_lexer.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(parser.out)
    add_executable(${PROJECT_NAME} main_parser.cpp)
    target_link_libraries(${PROJECT_NAME} m calamity_core)

    project(tests.out)
    add_subdirectory(tests)

    project(lexertl_gen.out)
    add_subdirectory(lexertl_gen)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

add_subdirectory(/usr/local/include/googletest ../gtets-build)

add_executable(${PROJECT_NAME} tests.cpp)
target_link_libraries(${PROJECT_NAME} gtest gtest_main gmock calamity_core)
cmake_minimum_required(VERSION 3.9.0)

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough")

set(SOURCES ../src/token.cpp
            ../src/var_substring.cpp
            ../src/cui.cpp
            ../src/message_exception.cpp)

add_executable(lexertl_gen.out main_lexertl_gen.cpp ${SOURCES})
最终,我决定将
travisci
添加到我的项目中。我编写了一个
bootstrap.sh
脚本来安装和配置所有依赖项(我还安装了
gcc8.1
,因为安装在
travisci
服务器上的默认
gcc4.8.4
不支持
gnu++2a
)。这个脚本运行良好,但是在运行<代码>脚本/构建所有.SH <代码> >代码> Travis CI >代码>服务器GCC没有设置<代码> GNU+2A<代码>,用于编译我的主要项目,并使用测试,抱怨使用<代码>内联变量,<代码> STD::ISSO积分和其他现代C++的东西,明确提到这些功能在
std=c++17
std=gnu++17
下受支持

我不明白,因为我更新了
GCC
,我的第一个简单代码生成器程序运行良好(尽管如果我从
tests/CMakeLists.txt
中删除
set(CMAKE\u CXX\u FLAGS…
),这个程序在我的
PC
上编译,但在
Travis CI
服务器上也不编译)。我在这里干什么?是因为Travis使用的
Cmake 3.9

My
.travis.yml
配置文件:

language: cpp
sudo: required
dist: trusty
compiler:
- g++
os:
- linux
script:
- ./bootstrap.sh; cd scripts; ./build_all.sh; ./run_tests.sh
env:
  global:
  - LANG="en_US.UTF-8"

matrix:
  include:
    - os: linux
      addons:
        apt:
          compiler: gcc
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-8
          env: COMPILER=g++-8

(很抱歉为空
README.md

我终于解决了一个问题,将
CMAKE\u CXX\u FLAGS
作为缓存变量:

set(CMAKE_CXX_FLAGS "-g -std=gnu++2a -Werror \
                     -Wno-error=variadic-macros \
                     -Werror=implicit-fallthrough"
                    CACHE STRING "compiler flags")
虽然我不认为这是一个漂亮的解决方案,但我仍然不明白为什么它在我的
PC
上编译,而不是在
travisci