在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 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'构建。

我们在特拉维斯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 有:错误:找不到方案

Travis CI - 无法查询测试包中的测试用例列表:找不到测试包

使用 Travis CI 配置 Mysql 5.7

Swift 测试在本地通过,但在 Travis-CI 上构建失败

Travis CI 问题:在提到的工作区中找不到指定的方案