[英]Pass an argument though makefile linux/unix command line in C
我的makefile是:
CFLAGS=-g
all: mcast_client mcast_server
mcast_client: mcast_client.o $(ARG1)
mcast_server: mcast_server.o
clean:
rm -f mcast_client mcast_server mcast_client.o mcast_server.o
在命令窗口中輸入
$ make ARG1=hello, world!
這個對嗎?
采用:
$ make ARG1="hello, world!"
您的調用make ARG1="hello, world!"
幾乎是正確的(但外殼需要引號),但您的Makefile
不是。
一種更現實的方法是將消息作為預處理器宏傳遞。
假設hello.c
包含(在某些C函數中間)
printf("%s\n", MESSAGE);
然后你可以有一個Makefile
規則,例如
hello.o: hello.c
$(COMPILE.c) -DMESSAGE=\"$(MSG)\" $< -o $@
引號用反斜杠表示,因為預處理程序宏MESSAGE
應該帶有引號。
最后,您可以調用
make "MSG=hello friend"
請注意,如果MSG
包含引號"
或反斜杠\\
...,這將不起作用\\
在上面的命令中,引號由shell解釋...
請注意,您應該每次都使用相同的命令來調用make
(因為hello.o
不會在MSG
更改后重建)。
順便說一句,養成總是用-Wall
編譯的習慣,所以
CFLAGS= -Wall -g
並期待在預定義的規則make
給出make -p
考慮使用remake (特別是用-x
調用)來調試棘手的或復雜的Makefile
-s。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.