相关疑难解决方法(0)

如何在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万
查看次数

如何在Makefile目标中使用Bash语法?

我经常发现Bash语法非常有用,例如像diff <(sort file1) <(sort file2).中的进程替换.

是否可以在Makefile中使用此类Bash命令?我在考虑这样的事情:

file-differences:
    diff <(sort file1) <(sort file2) > $@
Run Code Online (Sandbox Code Playgroud)

在我的GNU Make 3.80中,这会产生错误,因为它使用shell而不是bash执行命令.

bash shell makefile

194
推荐指数
3
解决办法
11万
查看次数

makefile中的多行bash命令

我有一种非常舒适的方式来通过几行bash命令编译我的项目.但现在我需要通过makefile编译它.考虑到每个命令都在自己的shell中运行,我的问题是在makefile中运行多行bash命令的最佳方法什么,相互依赖? 例如,像这样:

for i in `find`
do
    all="$all $i"
done
gcc $all
Run Code Online (Sandbox Code Playgroud)

另外,有人可以解释为什么即使单行命令bash -c 'a=3; echo $a > file'在终端中工作正常,但在makefile情况下创建空文件?

bash makefile

98
推荐指数
3
解决办法
9万
查看次数

在目标主体内更改Makefile变量值

有没有办法在目标体内重新分配Makefile变量值?

我想要做的是为调试编译添加一些额外的标志:

%.erl: %.beam
    $(ERLC) $(ERLFLAGS) -o ebin $<

test: clean debug_compile_flag compile compile_test

debug_compile:
    $(ERLCFLAGS) += -DTEST
Run Code Online (Sandbox Code Playgroud)

因此,如果我调用测试目标,我想清理我的环境,添加一些新标志(比如现有的-DTEST),再次编译整个代码(第一个源,然后是测试模块).

我不想复制/粘贴用于编译的代码,因为有很多逻辑放在这里和那里.

有没有一些简单的方法来重新定义变量值,以便我可以重用现有的代码?

makefile target

52
推荐指数
4
解决办法
5万
查看次数

无法在配方内分配变量

我该如何工作?它出错"make:somevariable:command not found"

sometarget:
    somevariable = somevalue
Run Code Online (Sandbox Code Playgroud)

完整示例:

CXXFLAGS = -I/usr/include/test -shared -fPIC

OBJ = main.o Server.o

blabla : $(OBJ) 
ifeq ($(argsexec),true) 
    # Creates an executable
    CXXFLAGS = -I/usr/include/test
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
else 
    # Creates a library
    DESTDIR = /home/pc
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
    ./bn.sh
endif
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

Makefile将命令输出分配给变量

我有一个脚本压缩我的CSS文件并输出输出文件的文件名.
我正在尝试构建一个makefile来自动化该过程:

all:
    @echo "Compiling CSS"
    CSS_OUTPUT=$(shell php minify_css.php )
    echo $(CSS_OUTPUT)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将输出文件名存储在CSS_OUTPUT变量中,但我做错了,因为整个makefile只是打印出来:

$ make
abcdefg.css
Compiling CSS
CSS_OUTPUT=
echo 
Run Code Online (Sandbox Code Playgroud)

因此未分配输出CSS_OUTPUT.另外,为什么php输出之前打印@echo "Compiling CSS"

我试过这个:

all:
    @echo "Compiling CSS"
    CSS_OUTPUT=$(shell echo php minify_css.php )
    echo $(CSS_OUTPUT)
Run Code Online (Sandbox Code Playgroud)

但它只会变得更糟:

$ make
Compiling CSS
CSS_OUTPUT=php minify_css.php
./minify_css.php: line 1: ?php: No such file or directory
./minify_css.php: line 3: syntax error near unexpected token `dirname'
./minify_css.php: line 3: `require_once( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'maintenance.php' );'
make: *** [css] Error 2
Run Code Online (Sandbox Code Playgroud)

编辑 …

makefile

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

重新评估makefile变量

有没有办法在每次使用时重新评估变量的定义?例如:

MAP_FILES = $(shell find $(TMP) -name "*.map")

all: generate_map_files work_with_map_files

generate_map_files:
   ./map-builder

work\_with\_map_files: $(MAP_FILES)
   ./map-user

%.map:
   ./map-edit $@
Run Code Online (Sandbox Code Playgroud)

因此,在读取makefile时将评估MAP_FILES,如果$ TMP目录中没有.map文件,则该变量将为空.但是在generate_map_files规则完成后,目录中会有.map文件,我希望这些.map文件的列表成为work_with_map_files规则的先决条件.

在生成之前我不知道.map文件的文件名,因此我无法明确声明带有文件名的变量.我需要在生成映射文件列表后设置变量.任何建议都会非常有帮助.谢谢.

variables makefile

10
推荐指数
1
解决办法
3178
查看次数

makefile 使用目标中定义的变量

如何使用在 make 目标中定义的变量

.PHONY: foo

VAR_GLOBAL=$(shell cat /tmp/global)

foo:
    echo "local" > /tmp/local
    VAR_LOCAL=$(shell cat /tmp/local)
    echo ${VAR_GLOBAL}
    echo ${VAR_LOCAL}
Run Code Online (Sandbox Code Playgroud)

这是执行输出:

$ echo global > /tmp/global
$ make foo
echo "local" > /tmp/local
VAR_LOCAL=local
echo global
global
echo
Run Code Online (Sandbox Code Playgroud)

makefile

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

标签 统计

makefile ×8

bash ×2

gnu-make ×2

shell ×1

target ×1

variables ×1