我在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更加不可知,我仍然遇到同样的问题。
答案 0 :(得分:2)
问题是你硬编码你的编译器然后要求travis构建针对两个编译器。这意味着travis将尝试使用gcc构建代码,然后再使用clang构建代码。您有两个选项从您的.travis.yml
中删除clang作为编译器,或者将您的makefile更改为编译器无关。要更改makefile,只需用$(CC)
此外,$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图像非常小。
答案 1 :(得分:0)
问题是您对编译器进行了硬编码,然后要求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
'进行构建。我们在Travis CI上的构建工作受到了严重影响。
在构建矩阵中,我们有专门的构建作业来使用GCC和Clang构建Git 从一开始就在Linux和macOS上都使用(522354d(添加 Travis CI支持,2015年11月27日,Git v2.7.0-rc0))。
las,这从来没有像预期的那样有效,因为Travis CI将编译工作指定为“export CC=gcc
”和“export CC=clang
”(对于 使用“./configure && make
构建的项目)。
因此,我们的“linux-clang
”构建作业一直使用GCC,
,因为这是Travis CI的Linux映像中“cc
”指向的位置,而“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
”使用才能使用。