簡體   English   中英

在Makefile上放置東西(CFLAGS或CXXFLAGS)?

[英]Where to put things (CFLAGS or CXXFLAGS) on Makefile?

首先是Makefile在這里

CFLAGS   = -g -Wall -lm

那個時候我和C一起玩。 現在我正在使用C++ ,我必須在其上添加-I eigen ,quick google,並發現C++世界存在CXXFLAGS ,而C世界存在CFLAGS 所以我更新了Makefile

CFLAGS   = -g -Wall -lm
CXXFLAGS = -I eigen

然后我找到了https://wiki.gentoo.org/wiki/GCC_optimization ,並受到啟發再次更新它

CFLAGS   = -g -Wall -lm
CXXFLAGS = ${CFLAGS} -I eigen

完整的事情:

CC       = g++
CFLAGS   = -g -Wall -lm
CXXFLAGS = ${CFLAGS} -I eigen
OBJS     = main.o multiply.o 
PROGRAM  = multitply
$(PROGRAM): $(OBJS)
    $(CC) $(OBJS) $(CFLAGS) -o $(PROGRAM)

我應該在CXXFLAGSCFLAGS添加-I eigen嗎?

還注意到了CPPFLAGS的存在。

我應該更改為$(CC) $(OBJS) $(CXXFLAGS) $(CPPFLAGS) -o $(PROGRAM)還是$(CC) $(OBJS) -o $(PROGRAM)

我應該更改為$(PROGRAM): $(OBJS) *.h ,所以每當.h文件發生變化時它都會重建嗎?

它的任何其他改進?

在編譯C ++文件時,我會在編譯C文件和CXXFLAGS時使用CFLAGS 除了CFLAGSCXXFLAGS之外,您可能還缺少另一個相關變量: CPPFLAGS

我應該在CXXFLAGSCFLAGS添加-I eigen嗎?

CPPFLAGS通常用於提供與預處理器相關的選項。 我會使用此變量來指定包含目錄:

CPPFLAGS = -I eigen

另一個有趣的變量是LDLIBS提供庫非常有用。 您可以利用它來傳遞-lm

LDLIBS = -lm

我應該更改為$(PROGRAM): $(OBJS) *.h ,所以每當.h文件發生變化時它都會重建嗎?

我建議的方法是通過編寫沒有配方的規則將頭文件的先決條件添加到相應的目標文件,例如:

main.o: main.h multiply.h ...
multiply.o: multiply.h ...

此外, *不會做你期望的事情,也就是說,它不是那個環境中的通配符。 將這些行放在Makefile的末尾,這樣它們就不會替換默認目標。


Makefile可能是這樣的:

CXXFLAGS = -g -Wall
CPPFLAGS = -I eigen
LDLIBS   = -lm
OBJS     = main.o multiply.o 
PROGRAM  = multitply

$(PROGRAM): $(OBJS)
   $(CXX) $^ $(LDLIBS) -o $@

無需在配方中重復$(PROGRAM)$(OBJS) ,您可以分別使用自動變量$@$^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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