在travis CI上运行Makefile时找不到gcc命令

时间:2014-02-15 17:41:14

标签: gcc travis-ci

我在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更加不可知,我仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:2)

问题是你硬编码你的编译器然后要求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图像非常小。

答案 1 :(得分:0)

  

问题是您对编译器进行了硬编码,然后要求travis针对两个编译器进行构建。

作为执行此操作并更改其Travis CI设置以解决该问题的项目的示例,请参阅Git 2.21(2019年2月),其中travis CI脚本已更正以使用编译器构建Git。 )。

请参见commit 2c8921dcommit 2000ac9commit bbf24adcommit ff0eec9SZEDER 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”使用才能使用。