在travis CI上运行Makefile时找不到gcc命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在travis CI上运行Makefile时找不到gcc命令相关的知识,希望对你有一定的参考价值。
我在github上有一个C项目,我试图在Travis-CI中构建代码,但是我收到了这个错误:
Using worker: worker-linux-9-2.bb.travis-ci.org:travis-linux-2
$ export CC=gcc
git.1
$ git clone --depth=50 --branch=someDevs git://github.com/luizfilipe/ffb-cglib.git luizfilipe/ffb-cglib
Cloning into 'luizfilipe/ffb-cglib'...
remote: Counting objects: 114, done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 114 (delta 27), reused 80 (delta 12)
Receiving objects: 100% (114/114), 2.53 MiB | 0 bytes/s, done.
Resolving deltas: 100% (27/27), done.
Checking connectivity... done.
$ cd luizfilipe/ffb-cglib
git.3
$ git checkout -qf f76cd622418a75003d1aa6326c38039c1f556ee8
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ make
gcc -c -pendantic examples/environment/main.c -I/usr/bin/Mesa-5.0/include -g
make: gcc: Command not found
make: *** [main.o] Error 127
The command "make" exited with 2.
Done. Your build exited with 1.
阅读错误我注意到找不到gcc
,但.travis.yml的配置如下:
language: c
compiler:
- gcc
script: make
Makefile的配置如下:
# Variables
MESA = /usr/bin/Mesa-5.0
PATH = examples/environment/main
EXAMPLE_ENVIRONMENT = examples/environment/main.c
INCPATH = -I$(MESA)/include
LIBPATH = -L$(MESA)/lib
LIBS = -lglut -lGLU -lGL -lm
CFLAGS = $(INCPATH) -g
LFLAGS = $(LIBPATH) $(LIBS)
# Main targets
all: main.o
$(CC) -o $(PATH) main.o $(LFLAGS)
# Source targets
main.o: $(EXAMPLE_ENVIRONMENT)
$(CC) -c -pendantic $(EXAMPLE_ENVIRONMENT) $(CFLAGS)
有什么想法吗?
更新:我只是切断了clang并使Makefile更加不可知,我仍然遇到同样的问题。
问题是你硬编码你的编译器然后要求travis构建针对两个编译器。这意味着travis将尝试使用gcc构建代码,然后再使用clang构建代码。您有两个选项从.travis.yml
中删除clang作为编译器,或者将makefile更改为编译器无关。要更改makefile,只需用$(CC)
替换gcc的所有实例
此外,$PATH
包含查找可执行文件的位置。如果你覆盖它使得找不到任何东西。所以你需要将$ PATH重命名为example_path之类的例子
# Variables
MESA = /usr/bin/Mesa-5.0
example_path = examples/environment/
EXAMPLE_ENVIRONMENT = examples/environment/main.c
INCPATH = -I$(MESA)/include
LIBPATH = -L$(MESA)/lib
LIBS = -lglut -lGLU -lGL -lm
CFLAGS = $(INCPATH) -g
LFLAGS = $(LIBPATH) $(LIBS)
# Main targets
all: main.o
$(CC) -o $(example_path)/main.o $(LFLAGS)
# Source targets
main.o: $(EXAMPLE_ENVIRONMENT)
$(CC) -c -pendantic $(EXAMPLE_ENVIRONMENT) $(CFLAGS)
您还需要在.travis.yml
文件中添加before_install部分以安装Mesa,因为travis图像非常小。
问题是你硬编码你的编译器然后要求travis构建针对两个编译器。
作为一个项目的例子,并且改变了它的Travis CI设置来解决这个问题,请参阅Git 2.21(2019年2月),其中已修正travis CI脚本以使用我们的编译器构建Git。选择。
参见commit 2c8921d,commit 2000ac9,commit bbf24ad,commit ff0eec9,SZEDER Gábor (szeder
)(2019年1月17日)。
(由Junio C Hamano -- gitster
--合并于commit 51b9966,2019年2月7日)
travis-ci
:使用正确的编译器构建我们的'
Makefile
'硬编码编译器将Git构建为'CC = cc
'。 这个CC
变量可以从命令行覆盖,即'make CC=gcc-X.Y
'将使用特定的GCC
版本构建,但不是来自环境,即'CC=gcc-X.Y make
'仍将使用恰好位于平台上的'cc
'构建。我们在特拉维斯CI的建筑工作受到严重影响。
在构建矩阵中,我们有专门的构建作业,从一开始就在Linux和macOS上使用GCC和Clang构建Git(522354d(添加Travis CI支持,2015-11-27,Git v2.7.0-rc0))。 唉,这从未真正起作用,因为Travis CI将这些构建作业的编译器指定为'
export CC=gcc
'和'export CC=clang
'(适用于使用'./configure && make
'构建的项目)。 因此,我们的'linux-clang
'构建工作一直使用GCC,
,因为这是'cc
'指向Travis CI的Linux图像,而'osx-gcc
'构建工作一直使用Clang。 此外,37fa4b3(travis-ci:在linux-gcc作业上运行gcc-8,2018-05-19,Git v2.18.0-rc0)添加了一个'export CC=gcc-8
',试图用更现代的编译器构建,但是没有无济于事。使用基于
MAKEFLAGS
环境变量的CC
设置$CC
,因此'make
'将运行“正确”的编译器。 Travis CI上的Xcode 10.1 macOS映像已经包含了Homebrew的gcc@8
软件包,但是我们必须首先使用'brew link
'才能使用它。
以上是关于在travis CI上运行Makefile时找不到gcc命令的主要内容,如果未能解决你的问题,请参考以下文章
在netbeans中运行makefile时找不到sdl2-config可执行文件
Travis CI - 无法查询测试包中的测试用例列表:找不到测试包