.PHONYMakefile 中的含义是什么?我已经完成了这个,但它太复杂了.
有人可以用简单的语言向我解释一下吗?
在我的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?
我明白我能做到
$ make action VAR="value"
$ value
Run Code Online (Sandbox Code Playgroud)
同 Makefile
VAR = "default"
action:
@echo $(VAR)
Run Code Online (Sandbox Code Playgroud)
我如何获得以下行为?
$ make action value
value
Run Code Online (Sandbox Code Playgroud)
?
怎么样
$make action value1 value2
value1 value2
Run Code Online (Sandbox Code Playgroud) 如何在运行make时列出Makefile中所有变量(也称为宏)的当前值?
例如,如果这是在Makefile中:
CUR-DIR := $(shell /bin/pwd)
LOG-DIR := $(CUR-DIR)/make-logs
Run Code Online (Sandbox Code Playgroud)
然后我想告诉我:
CUR-DIR = /home/johv/src/test
LOG-DIR = /home/johv/src/test/make-logs
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Makefile 中执行一个简单的 if else 语句:
check:
if [ -z "$(APP_NAME)" ]; then \
echo "Empty" \
else \
echo "Not empty" \
fi
Run Code Online (Sandbox Code Playgroud)
当我执行时make check,出现以下错误:
if [ -z "" ]; then
/bin/bash: -c: line 1: syntax error: unexpected end of file
make: *** [check] Error 2
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
我知道我可以使用以下内容,但是在回声之后我有很多逻辑,所以我需要将它分布在多行中:
check:
[ -z "$(PATH)" ] && echo "Empty" || echo "Not empty"
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的makefile:
.SILENT: #don't echo commands as we run them.
###
# here, set $1 (in the latter bash script) to the first make arg.
# $2 to the second one.
# et cetera.
# ($0 being set properly is optional)
###
foo:
echo "you passed to make: $1 $2 $3 $4 $5 $6"
Run Code Online (Sandbox Code Playgroud)
所以我可以做:
make foo
You passed to make: foo
Run Code Online (Sandbox Code Playgroud)
(不要告诉任何人,但我正在创建“给我做三明治”的东西)
我想在 Makefile 中执行一些代码之前检查是否设置了环境变量。如果未设置,我想抛出一个带有简单错误消息的错误:
run:
[ -z "$(MY_APP)" ] && echo "MY_APP must be set" && exit 1
echo "MY_APP is set. Yay!"
echo "Let's continue on with the command..."
Run Code Online (Sandbox Code Playgroud)
当MY_APP未设置时,我收到以下错误,这是需要的:
[ -z "" ] && echo "MY_APP must be set" && exit 1
MY_APP must be set
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)
但是,何时MY_APP设置我收到以下错误:
[ -z "EXAMPLE_NAME" ] && echo "MY_APP must be set" && exit 1
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?有没有更好的方法来做到这一点?
生成文件
abc:
TEST=$@ /* TEST=abc */
def:
TEST=$@ /* TEST=def */
xxx:
@echo $(TEST)
Run Code Online (Sandbox Code Playgroud)
如果我运行make abc xxx,我期望输出abc。
如果我运行make def xxx,我期望输出def。
但事实并非如此。似乎make不允许我在目标中定义变量。我的问题是如何定义一个变量及其值(取决于构建的目标)?
我有一个程序,我有这个 make 文件,我试图用这个 makefile 运行我的程序,它编译得很好,问题是当我运行该程序时,我应该像这样运行它,./user -n tejo.tecnico.ulisboa.pt -p 58011或者-n tejo.tecnico.ulisboa.pt这个-p 58011是可选的。
我看到这篇文章将参数传递给“make run”,但我不明白我在 make run 命令中做错了什么
那么谁能告诉我我的 makefile 有什么问题吗?
顺便说一句,我在制作 makefile 和使用命令行方面相当陌生。
程序:
# Makefile
CC = g++
LD = g++
AUXLIB = auxiliar_code/aux_functions.h
SOCKETLIB = socket_operations/socket_functs.h
COMMANDSLIB = commands/commands.h
.PHONY: all clean run
all: client
client: socket_operations/socket.o auxiliar_code/aux.o commands/commands.o commands/client.o main.o
$(LD) -o user socket_operations/socket.o auxiliar_code/aux.o commands/commands.o commands/client.o main.o
auxiliar_code/aux.o: auxiliar_code/aux_functions.cpp $(AUXLIB) client_constants.h
$(CC) -o auxiliar_code/aux.o -c auxiliar_code/aux_functions.cpp
commands/client.o: commands/Client.cpp $(COMMANDSLIB) …Run Code Online (Sandbox Code Playgroud) 让我说我正在做mk"目标"来构建一些东西.有可能传递一个参数吗?即mk"目标""x",它会做相应的事情吗?我知道我将提供mk"target"一个参数,我知道它的语义,只是提前不知道这个名字.
可能?
makefile ×10
bash ×2
gnu-make ×2
arguments ×1
c ×1
c++ ×1
command-line ×1
gnu ×1
if-statement ×1
parameters ×1
phony-target ×1