标签: gnu-make

GNU Makefile变量赋值=,?=,:=和+ =之间有什么区别?

任何人都可以清楚地解释变量赋值在Makefile中是如何工作的.

有什么区别:

 VARIABLE = value
 VARIABLE ?= value
 VARIABLE := value
 VARIABLE += value
Run Code Online (Sandbox Code Playgroud)

我已经阅读了GNU Make手册中的部分,但它对我来说仍然没有意义.

makefile gnu-make

740
推荐指数
6
解决办法
20万
查看次数

如何在makefile中编写'cd'命令?

例如,我的makefile中有类似的东西:

all:
     cd some_directory
Run Code Online (Sandbox Code Playgroud)

但是当我输入时,我make只看到'cd some_directory',就像在echo命令中一样.

makefile gnu-make

319
推荐指数
5
解决办法
18万
查看次数

在GNU Make中使用CMake:如何查看确切的命令?

我使用CMake与GNU Make,并希望完全看到所有命令(例如编译器如何执行,所有标志等).

GNU make有--debug,但似乎没有任何其他选项有用吗?CMake是否在生成的Makefile中提供了额外的标志以进行调试?

cmake gnu-make

255
推荐指数
7
解决办法
14万
查看次数

如何在makefile中打印出变量

在我的makefile中,我有一个变量'NDK_PROJECT_PATH',我的问题是如何在编译时将其打印出来?

我读了Make文件echo显示"$ PATH"字符串,我试过:

@echo $(NDK_PROJECT_PATH)
@echo $(value NDK_PROJECT_PATH)
Run Code Online (Sandbox Code Playgroud)

两个都给了我

"build-local.mk:102: *** missing separator.  Stop."
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么它不适合我?

makefile gnu-make

222
推荐指数
8
解决办法
30万
查看次数

在规则执行时定义make变量

在我的GNUmakefile中,我希望有一个使用临时目录的规则.例如:

out.tar: TMP := $(shell mktemp -d)
        echo hi $(TMP)/hi.txt
        tar -C $(TMP) cf $@ .
        rm -rf $(TMP)
Run Code Online (Sandbox Code Playgroud)

如上所述,上述规则在解析规则时创建临时目录.这意味着,即使我没有直接创建.tar,也会创建许多临时目录.我想避免我的/ tmp被未使用的临时目录弄乱.

是否有办法使该变量仅在触发规则时定义,而不是在定义时定义?

我的主要想法是将mktemp和tar转储到shell脚本中,但这看起来有点难看.

makefile gnu-make

186
推荐指数
4
解决办法
14万
查看次数

如何获取Makefile的当前相对目录?

我在app特定目录中有几个Makefile,如下所示:

/project1/apps/app_typeA/Makefile
/project1/apps/app_typeB/Makefile
/project1/apps/app_typeC/Makefile
Run Code Online (Sandbox Code Playgroud)

每个Makefile在此路径中包含一个.inc文件:

/project1/apps/app_rules.inc
Run Code Online (Sandbox Code Playgroud)

在app_rules.inc里面我正在设置我希望在构建时放置二进制文件的目的地.我希望所有二进制文件都在各自的app_type路径中:

/project1/bin/app_typeA/
Run Code Online (Sandbox Code Playgroud)

我尝试过使用$(CURDIR),像这样:

OUTPUT_PATH = /project1/bin/$(CURDIR)
Run Code Online (Sandbox Code Playgroud)

但相反,我把二进制文件埋在整个路径名中,如下所示:( 注意冗余)

/project1/bin/projects/users/bob/project1/apps/app_typeA
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能获得执行的"当前目录",这样我才能知道app_typeX为了将二进制文件放在各自的类型文件夹中?

makefile working-directory gnu-make

183
推荐指数
7
解决办法
24万
查看次数

你如何获得makefile中的目标列表?

我已经使用了rake(一个Ruby make程序),它有一个选项来获取所有可用目标的列表,例如

> rake --tasks
rake db:charset      # retrieve the charset for your data...
rake db:collation    # retrieve the collation for your da...
rake db:create       # Creates the databases defined in y...
rake db:drop         # Drops the database for your curren...
...
Run Code Online (Sandbox Code Playgroud)

但似乎没有选择在GNU make中执行此操作.

显然,代码几乎就在那里,截至2007年 - http://www.mail-archive.com/help-make@gnu.org/msg06434.html.

无论如何,我几乎没有从makefile中提取目标,你可以将其包含在makefile中.

list:
    @grep '^[^#[:space:]].*:' Makefile
Run Code Online (Sandbox Code Playgroud)

它将为您提供已定义目标的列表.这只是一个开始 - 例如,它不会过滤掉依赖项.

> make list
list:
copy:
run:
plot:
turnin:
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make targets

176
推荐指数
11
解决办法
12万
查看次数

如何为调试和发布版本配置makefile?

我的项目有以下makefile,我想为发布和调试版本配置它.在我的代码中,我有很多#ifdef DEBUG宏,所以这只是设置这个宏并将-g3 -gdwarf2标志添加到编译器的问题.我怎样才能做到这一点?

$(CC) = g++ -g3 -gdwarf2
$(cc) = gcc -g3 -gdwarf2

all: executable

executable: CommandParser.tab.o CommandParser.yy.o Command.o
    g++ -g -o output CommandParser.yy.o CommandParser.tab.o Command.o -lfl

CommandParser.yy.o: CommandParser.l 
    flex -o CommandParser.yy.c CommandParser.l
    gcc -g -c CommandParser.yy.c

CommandParser.tab.o: CommandParser.y
    bison -d CommandParser.y
    g++ -g -c CommandParser.tab.c

Command.o: Command.cpp
    g++ -g -c Command.cpp

clean:
    rm -f CommandParser.tab.* CommandParser.yy.* output *.o
Run Code Online (Sandbox Code Playgroud)

只是为了澄清,当我说发布/调试版本时,我希望能够只键入make并获得发布版本或make debug获得调试版本,而无需手动注释掉makefile中的内容.

makefile gnu-make

169
推荐指数
4
解决办法
19万
查看次数

@, - 和+作为Make中的配方行的前缀做什么?

在GNU Makefile手册中,它提到了这些前缀.

如果提供.ONESHELL,则仅检查配方的第一行是否有特殊前缀字符('@',' - '和'+').

这些前缀做了什么,它们在哪里提到?

makefile gnu-make

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

@ :(符号冒号)在Makefile中的含义是什么?

Makefile中的以下内容是什么?

rule: $(deps)
    @:
Run Code Online (Sandbox Code Playgroud)

我似乎无法在制作手册中找到这个.

makefile gnu-make

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

标签 统计

gnu-make ×10

makefile ×9

cmake ×1

targets ×1

working-directory ×1