标签: gnu-make

GNU make:单个规则中的多个目标

可能重复:
GNU Makefile规则从单个源文件生成一些目标

如果我有这样的Makefile规则:

a b c:
    echo "Creating a b c"
    touch a b c

output: a b c
    cat a b c > output
Run Code Online (Sandbox Code Playgroud)

然后我运行make -j9输出

make看到3个依赖项(a,b,c),查找如何生成它们:(上面的"ab c"规则),但接下来会发生什么?如果没有意识到"ab c"规则只需要运行一次来​​创建所有3个目标吗?

这就是实际做的事情:

[pavel@orianna test]$ make -j9 output -n
echo "Creating a b c"
touch a b c
echo "Creating a b c"
touch a b c
echo "Creating a b c"
touch a b c                                                                                                                                                                                                                                                                    
cat a b c > output                                                                                                                                                                                                                                                             
[pavel@orianna test]$
Run Code Online (Sandbox Code Playgroud)

相同的配方运行3次,每次依赖一次以规则"输出"!

有谁知道它为什么会这样?

makefile gnu-make

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

什么是Makefile Target` .co`?

有人最近.c.o在Makefile中提到了交叉兼容性的目标,但我不明白它的目的.任何人都可以澄清吗?

makefile gnu-make

28
推荐指数
1
解决办法
2万
查看次数

如何在make中拆分字符串?

我需要在我的Makefile中获取一个参数,该参数由表单中的主机标识符组成

host[:port]
Run Code Online (Sandbox Code Playgroud)

冒号和端口是可选的.所以以下所有内容都是有效的:

foo.example.com
ssl.example.com:443
localhost:5000
Run Code Online (Sandbox Code Playgroud)

等等

我想拆就可选结肠串并分配给变量,使HOST包含foo.example.com,ssl.example.com,localhost等,PORT分别包含80个(默认端口),443和500.

makefile gnu-make

27
推荐指数
1
解决办法
2万
查看次数

读取makefile中的输入变量,并根据其名称设置变量

我有一个makefile,我想从输入中读取模块名称,然后根据它的名称创建目录.这是我的代码:

build:  
    @read -p "Enter Module Name:" module;  
    module_dir=./modules/$$module  
    mkdir -p $$module_dir/build;  
Run Code Online (Sandbox Code Playgroud)

但是在设置module_dir之后,它只包含./modules/(没有连接模块名称).
我的代码有什么问题?

谢谢你的回答

makefile gnu-make

27
推荐指数
1
解决办法
2万
查看次数

我可以获得GNU make的第二个先决条件吗?

可能重复:
如何使用Makefile中的自动变量获取第二个依赖项文件?

我使用GNU make和我使用的自动变量,在$<,$^等我知道这$<仅仅是第一要义,并$^为所有的先决条件. 有没有办法获得第二个先决条件?

makefile gnu-make

27
推荐指数
1
解决办法
8930
查看次数

如何获取GNU Makefile中使用的shell命令的退出状态?

我在执行linux工具时有一个makefile规则.我需要检查工具命令的退出状态,如果该命令失败,则必须中止make.

我试过用$ ?, $$来检查?\ $?makefile中的etc等.但是当makefile运行时,它们会给我语法错误.

这样做的正确方法是什么?

这是Makefile中的相关规则

    mycommand \
    if [ $$? -ne 0 ]; \
    then \
        echo "mycommand failed"; \
        false; \
    fi
Run Code Online (Sandbox Code Playgroud)

linux shell makefile gnu-make

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

Cmake,gnu make和手动编译之间的区别

我是编程新手,所以这是一个抽象的问题而不是技术问题.我一直在使用IDE来学习,但我听说它们在创建可执行文件时过于简化了编译,汇编和链接的行为.

我正在尝试下载和编译库而不依赖于IDE(在本例中为librocket).我首先必须使用Cmake来创建二进制文件.配置和生成后,我没有在输出目录中看到任何目标文件或.cpp文件.然后我不得不使用gnu make命令,然后在输出目录中创建目标文件和.cpp文件.

从下载源代码到实际创建目标文件的步骤是Cmake和gnu make吗?在什么时候编译器和链接器实际调用?

我已经成功编译了一个我编写的测试库,然后编译了另一个使用g ++链接到它的程序,但我有点迷失,因为我必须使用Cmake和gnu make而不是直接调用编译器.

cmake gnu-make

26
推荐指数
2
解决办法
2万
查看次数

取决于make文件本身

如果Makefile本身被更改,安全的赌注是将所有目标都视为过时.

有没有一种聪明的方法来添加这种依赖?还有其他选择吗?

makefile gnu-make

25
推荐指数
3
解决办法
5928
查看次数

GNU makefile如何以及何时引用字符串

如何以及何时在make文件中引用字符串?什么是最佳做法?

以下是引用方式吗?

$(warning  $(shell ls -ld "$(CURDIR)" ) )
Run Code Online (Sandbox Code Playgroud)

我熟悉Bash,你通常引用变量来允许嵌入空格.你是否在makefile中这样做?

我该如何使用字符串进行赋值语句?

vara := "$(CURDIR)"

varb := $(CURDIR)

varc := /home/me/source

vard := "/home/me/source"
Run Code Online (Sandbox Code Playgroud)

平等后的空间怎么样?

makefile gnu-make

25
推荐指数
1
解决办法
2万
查看次数

更改make变量,并从同一Makefile中的配方调用另一个规则?

我已经看过如何从make目标手动调用另一个目标?,但我的问题有点不同; 考虑这个例子(注意,stackoverflow.com将选项卡更改为显示中的空格;但如果您尝试编辑,则选项卡将保留在源代码中):

TEXENGINE=pdflatex

pdflatex:
    echo the engine is $(TEXENGINE)

lualatex:
    TEXENGINE=lualatex
    echo Here I want to call the pdflatex rule, to check $(TEXENGINE) there!
Run Code Online (Sandbox Code Playgroud)

在这里,如果我运行默认目标(pdflatex),我得到预期的输出:

$ make pdflatex 
echo the engine is pdflatex
the engine is pdflatex
Run Code Online (Sandbox Code Playgroud)

但是,有了目标lualatex,我想:

  • make变量更改TEXENGINElualatex,然后
  • 调用与pdflatex(使用它)相同的代码.

我怎么能这样做?

很明显,在我的lualatex规则中,我甚至没有设法更改TEXENGINE变量,因为我在尝试时得到了这个:

$ make lualatex 
TEXENGINE=lualatex
echo Here I want to call the pdflatex rule, to check pdflatex there!
Here I want …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

25
推荐指数
2
解决办法
1万
查看次数

标签 统计

gnu-make ×10

makefile ×9

cmake ×1

linux ×1

shell ×1