簡體   English   中英

通過C中的makefile linux / unix命令行傳遞參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM