标签: gnu-make

如何告诉"gmake"使用另一个版本的GCC?(Linux)的

我在我的机器上有通常的gcc(在/ usr/bin/gcc),当我为我正在处理的某个框架设置环境时,另一个(更新的)被链接.

我想用/ usr/bin/gcc上的旧版本编译,而不是使用新版本.

我必须使用"gmake"命令进行编译(自定义编译设置).

在不改变PATH的情况下,我怎么能"告诉"gmake使用不同的gcc?

linux compiler-construction gcc gnu-make

3
推荐指数
1
解决办法
3640
查看次数

包括makefile,(搜索路径)(没有〜扩展)...是什么意思?

今天,当我使用 --debug=v 构建我的项目时,我注意到一些我并不真正理解它的含义的东西。

在他包含“子生成文件”的顶部有一个奇怪的打印输出,它告诉我(搜索路径)(没有〜扩展)......这是什么意思?

打印输出如下所示:

Reading makefiles...
Reading makefile `Makefile'...
Reading makefile `make_pc.mk' (search path) (no ~ expansion)...
Reading makefile `print_ring/make.mk' (search path) (no ~ expansion)...
Reading makefile `vendor/unity/make.mk' (search path) (no ~ expansion)...
Reading makefile `test01/make.mk' (search path) (no ~ expansion)...
Run Code Online (Sandbox Code Playgroud)

使用 include 的主 Makefile 中的行如下所示:

TEST := test01
include $(TEST)/make.mk
Run Code Online (Sandbox Code Playgroud)

包含的 makefile 可能如下所示:

CFLAGS  += -Itest01/
OBJ += test_main.o
test_main.o: test01/test_main.c
    @ echo ".compiling"
    $(CC) $(CFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来使用搜索路径?但是 ~ 会扩展到我的 unix 用户主目录吗?

注意:我在 Linux (Ubuntu) …

makefile gnu-make

3
推荐指数
1
解决办法
3745
查看次数

makefile notdir 命令

我的源文件不在我需要做的一个目录中 ../ 或 ../../ 东西。

之后,我需要更改源文件名,例如: ../ex/test.c to obj/test.o

用这个: 命令:

$(OBJDIR) $(notdir $(SOURCECODE:.c=.o))
Run Code Online (Sandbox Code Playgroud)

然而,只有$(SOURCECODE)( ../ex/test.c) 中的第一个文件名被正确重命名为 obj/test.o,其余的看起来都像*.o,没有目录信息。

makefile gnu-make

3
推荐指数
2
解决办法
6207
查看次数

编译器标志更改时自动重新编译

当我调试和优化我的一个 C/C++ 项目时,我经常禁用和启用-p -g -pg我的 Makefile 中的分析标志和一些优化标志,以便更好地了解发生了什么。

但是,GNU make没有检测到这种变化,也没有进行重新编译。

如何在不手动执行make clean?

c c++ makefile gnu-make

3
推荐指数
1
解决办法
479
查看次数

如何使 Make *not* 打印“目标配方失败?

我正在为一系列编译构建一个 Makefile,以显示用于与教程中的示例同步的渐进式输出差异。其中一些运行会生成错误代码,但由于这是“问题”定义的一部分,因此当目标失败时,由 make (“ Makefile:15: recipe for target `run3' failed ”)输出的消息有点进入道路。

我知道忽略错误代码,但是否可以抑制该输出?最好在 Makefile 中。

在类似的说明中,是否可以抑制从 Makefile 中进入和离开子目录的消息(相当于“--no-print-directory”)?

而且,是的,我对 GNU Make 的回答感到满意。

makefile gnu-make

3
推荐指数
1
解决办法
4986
查看次数

make 没有意识到相对路径名依赖与绝对路径名目标相同

以下是我遇到的问题的简化生成文件:

all: /tmp/makey/../filey
    @echo All done
/tmp/filey:
    @echo Filey
Run Code Online (Sandbox Code Playgroud)

当我运行 make 它说:

make-3.79.1-p7: *没有规则来制作目标/tmp/makey/../filey', needed by全部的。停止。

显然它没有意识到 /tmp/makey/../filey 与 /tmp/filey 相同。我有什么想法可以使这项工作?

谢谢

乔——穆拉里

gnu-make

3
推荐指数
1
解决办法
1628
查看次数

在构建具有共同依赖项的目标时,GNU make 是否会受到竞争条件的影响?

我有一个简单的示例 makefile 来显示我的问题:

.PHONY: a.out b.out

all: a.out b.out

common:
    echo building common
    sleep 1
    touch common

a.out: common
    echo building a.out
b.out: common
    echo building b.out
Run Code Online (Sandbox Code Playgroud)

a.out & b.out 取决于 common,因此在进行并行构建时可能会出现竞争条件(common 生成两次)。

我确实 make -j4 并且没有遇到 common 被生成两次。我什至在 common 生成中添加了 sleep 语句,以使事情更具确定性。

那么可以说 GNU make 在构建公共依赖项时正确同步吗?

makefile gnu-make race-condition

3
推荐指数
1
解决办法
1508
查看次数

GNU Make - 在规则/目标中从shell命令输出设置MAKEFILE变量

我正在尝试将一些复杂的makefile规则放在一起,以针对多个编译器自动构建项目.我有一个规则创建一些动态生成的变量并为它们分配变量,然后将这些变量传递给调用以构建单独的规则.

.PHONY: all
all:
    @echo "Detected CPULIST:${CPULIST_DETECTED}"
    @echo "CPULIST:${CPULIST}"
    @for cpu in $(CPULIST_DETECTED); do                   \
        echo "CPU:$${cpu}:";                                \
        eval VARIANTLIST_DETECTED=$(shell 2>&1 find ./.build/linux/$$cpu -mindepth 1 -maxdepth 1 | grep -v '\.svn' |  grep -v warning ); \
        eval echo "Detected Variant List:$${VARIANTLIST_DETECTED}"; \
        eval variant_$${cpu}=$${cpu};                      \
        eval echo "variant_\$${cpu}:\$${variant_$${cpu}}"; \
        $(MAKE) build CPULIST=$${cpu};                     \
    done

.PHONY: build
build: sanity_check $(TARGET)
    @true
Run Code Online (Sandbox Code Playgroud)

我有两个问题.第一个是,尽管cpu通过双重转义$$cpu,它在行中转换为null:

eval VARIANTLIST_DETECTED=$(shell 2>&1 find ./.build/linux/$$cpu -mindepth 1 -maxdepth 1 | grep -v '\.svn' | …
Run Code Online (Sandbox Code Playgroud)

c c++ makefile gnu-make

3
推荐指数
1
解决办法
5658
查看次数

匹配任何模式规则

我正在使用 GNU Make 3.81 版本。

从下面的例子中,我希望匹配任何模式(%:) 必须打印。而不是那个te%:已经执行。

有人可以解释一下,为什么目标' %: '没有运行?

这不匹配所有文件名吗?

生成文件:

all: test
    echo $@
%: 
    echo 1: $@
te%:
    echo 2: $@
Run Code Online (Sandbox Code Playgroud)

输出:

echo 2: test
2: test
echo all
all
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

3
推荐指数
1
解决办法
656
查看次数

在Ubuntu 18.04中安装旧版本的gnu-make

我想在Ubuntu 18.04上安装make 3.81。

因此,我下载了此版本的make并运行./configure,然后运行make。但是当编译它给我这个错误:

./glob/glob.c: In function ‘glob’:
./glob/glob.c:581:23: warning: implicit declaration of function ‘__alloca’; did you mean ‘alloca’? [-Wimplicit-function-declaration]
       newp = (char *) __alloca (dirlen + 1);
                       ^~~~~~~~
                       alloca
./glob/glob.c:581:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       newp = (char *) __alloca (dirlen + 1);
              ^
./glob/glob.c:709:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
        newp = (char *) __alloca (home_len + dirlen);
               ^
./glob/glob.c:732:15: warning: cast to pointer from …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu gnu-make

3
推荐指数
1
解决办法
1955
查看次数

标签 统计

gnu-make ×10

makefile ×7

c ×2

c++ ×2

linux ×2

compiler-construction ×1

gcc ×1

race-condition ×1

ubuntu ×1