标签: gnu-make

gnu make:如何连接两个字符串

鉴于这条线:

program_OBJS := ${program_SRCS:.cpp=.o}
Run Code Online (Sandbox Code Playgroud)

我想附加.o到每个文件名而不是替换.cpp.o.

我怎么做?

gnu makefile gnu-make

6
推荐指数
4
解决办法
3万
查看次数

使用操作系统语言安装 gnu make

我在我的 Windows 机器上安装了最新的 GNU make。

安装程序决定将语言设置为操作系统语言,但我没有收到提示。我希望它是英文的。我的操作系统是瑞典语。

我记得我在另一个 GNU 程序中遇到了类似的问题(不记得是哪个),这是通过添加环境变量“lang”和值“c”来解决的。

如何将 GNU make 的语言切换为英语?

mingw gnu-make

5
推荐指数
1
解决办法
1980
查看次数

gcc 4.8.1不会

我有一个新的Ubuntu linux安装,我正在尝试更新我的gcc编译器.最新的gcc编译器依赖于gmp,mpfr和mpc,所以我按照说明下载了这些并将源放入gcc 4.8.1源文件夹.

configure似乎运行得很好.我没有包含任何选项,因为似乎没有选择.我只是使用默认值运行.

当我运行make时,我收到以下错误:

configure: error: C++ compiler missing or inoperational

make[2]: \*** [configure-stage1-libcpp] Error 1    
make[2]: Leaving directory `/home/clay/programming/C++/gcc-4.8.1'    
make[1]: \*** [stage1-bubble] Error 2    
make[1]: Leaving directory `/home/clay/programming/C++/gcc-4.8.1'    
make: \*** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

我以root身份跑出了一个终端窗口,我做了一个make distclean并且第二次尝试了,但没有骰子.我知道它可以找到gcc和cc,因为它在make输出中都是这样说的.

有任何想法吗?

linux gcc gnu-make ubuntu-12.04

5
推荐指数
1
解决办法
7768
查看次数

GNU make 自动依赖生成

最近在学习GNU make。以下是 GNU make 手册中自动生成依赖项的示例。我知道上面脚本的一般含义(它基本上是用命令用其他东西替换一些东西sed)。但我对命令中的细节有两个问题。\1.o首先,命令中的含义是什么?与位置参数有关吗?其次,为什么$*要放入一对,()因为$*它本身已经意味着目标文件名的主干?(我尝试不加括号,但没有成功。)

%.d: %.c
    $(CC) -M $(CPPFLAGS) $< > $@.$$$$;                  \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但没有成功。

%.d: %.c
    $(CC) -M $(CPPFLAGS) $< > $@.$$$$;                  \
    sed 's,$*\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@;     \
    rm -f $@.$$$$
Run Code Online (Sandbox Code Playgroud)

谁能解释一下背后的原因吗?谢谢。

linux sed gnu-make

5
推荐指数
1
解决办法
340
查看次数

如何在 makefile 的另一个规则中运行模式规则?

我希望编写一个 makefile 来自动编译我正在处理的项目,其中文件的数量可能会或可能不会改变。我还需要能够快速告诉 make 将文件编译为调试版本或发布版本(通过命令行定义区分)。经过一番研究,我发现了模式规则并制定了一个。这是我到目前为止的代码:

# Our folders
# ODIR -    The .o file directory
# CDIR -    The .cpp file directory
# HDIR -    The .hpp file directory
ODIR = obj
CDIR = src
HDIR = inc

# Get our compiler and compiler commands out of the way
# CC -  Our compiler
# CFNO - Our compiler flags for when we don't have an output file
# CF -  Our compiler flags. This should be appended to any …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

5
推荐指数
1
解决办法
1826
查看次数

如何将值中带有空格的变量作为单个参数传递给 GNU make 函数?

这是我的 Makefile。

MYPATH = /dir 1/file 1.txt

test1:
    echo $(notdir $(MYPATH))

test2:
    echo $(notdir "$(MYPATH)")

test3:
    echo TODO
Run Code Online (Sandbox Code Playgroud)

我的目的是仅获取file 1.txt来自 的路径的一部分 /dir 1/file 1.txt。是的,这是一条有空格的路径。

我无法得到想要的结果。

$ make test1
echo dir file 1.txt
dir file 1.txt
Run Code Online (Sandbox Code Playgroud)

在上面的输出中,似乎notdir提供了三个单独的参数:/dir1/file1.txt,因此notdir 返回了它们的部分:dirfile1.txt

以下根本不起作用。

$ make test2
echo dir file 1.txt"
/bin/sh: 1: Syntax error: Unterminated quoted string
Makefile:7: recipe for target 'test2' failed
make: *** [test2] Error …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

5
推荐指数
0
解决办法
3333
查看次数

如何强制 make 始终更新并重新读取包含的 makefile?

我有一个Makefile生成 a 的文件makefile.mk,它随后包含在主 makefile 中。因为输入文件集(*.in在本例中)可以随时更改,所以我需要makefile.mk为每个文件重新生成一次make运行重新生成一次。

\n\n

文档指出include

\n\n
\n

一旦完成读取 makefile,make 将尝试重新生成任何已过期或不存在的 [included makefile]。

\n
\n\n

以及如何重新制作 Makefile

\n\n
\n

[A]读入所有 makefile 后,make 会将每个 makefile 视为目标并尝试更新它。如果 makefile 有一条规则说明如何更新它 [...],则如有必要,它将被更新。检查完所有 makefile 后,如果确实有任何更改,make 将从头开始并重新读取所有 makefile。

\n
\n\n

基于此,我认为以下应该有效:

\n\n
include makefile.mk\n\nmakefile.mk:\n    echo "--- Begin makefile.mk ---"\n    @( \\\n        shopt -q -s nullglob; \\\n        INPUTS=(*.in); \\\n        echo "all:" $${INPUTS//.in/.out}; \\\n        for f in $$INPUTS; do \\\n            echo "$${f/.in/.out}: $$f"; …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

5
推荐指数
1
解决办法
3330
查看次数

如何跟踪 Makefile 行号以进行故障排除?

这与如何跟踪 Makefile 目标进行故障排除有关?我正在使用旧的 PowerMac G5。它之所以存在,是因为我用它来测试较旧的编译器和大端、PowerPC。

我试图确定 makefile 中的哪一行导致了unexpected EOF while looking for matching ``'. 我们的makefile 不使用反引号(我们添加它们是为了测试这个问题);对于具有 1000 行的 makefile 来说,尝试/错误和猜测的速度太慢。

当我运行 make with 时--debug,它无法打印行号:

$ make --debug=a
GNU Make 3.82
Built for powerpc-apple-darwin9.8.0
...

Reading makefiles...
Reading makefile `GNUmakefile'...
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

5
推荐指数
1
解决办法
4698
查看次数

命令替换不适用于 makefile 中的 echo

这是一个在我的 bash shell 中运行良好的简单命令:

echo "Created at: $(date)" >> README.md
Run Code Online (Sandbox Code Playgroud)

它附加Created at: Wed Jan 24 10:04:48 STD 2018到 README.md。

但是,当我在 makefile 中包含相同的命令时,行为有所不同。

生成文件:

README.md:
    echo "Created at: $(date)" >> README.md
Run Code Online (Sandbox Code Playgroud)

运行时make README.md会将命令替换视为空字符串,如下所示:

echo "Created at: " >> README.md
Run Code Online (Sandbox Code Playgroud)

README.md 中附加的内容是Created at:.

如何在 makefile 中使用 echo 正确地进行命令替换输出?

bash shell scripting makefile gnu-make

5
推荐指数
1
解决办法
1762
查看次数

如果分配给变量的 shell 命令失败,如何使 GNU Make 失败?

我有一个 Make 变量:

PASSWORD:=$(shell vault read -field=password test/password)
Run Code Online (Sandbox Code Playgroud)

如果vault未安装,make将打印make: vault: Command not found,但继续执行配方。如果表达式失败,如何使其失败并停止执行?

makefile gnu-make

5
推荐指数
2
解决办法
1451
查看次数

标签 统计

gnu-make ×10

makefile ×7

linux ×2

bash ×1

gcc ×1

gnu ×1

mingw ×1

scripting ×1

sed ×1

shell ×1

ubuntu-12.04 ×1