[英]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)
我應該在CXXFLAGS
或CFLAGS
添加-I eigen
嗎?
還注意到了CPPFLAGS
的存在。
我應該更改為$(CC) $(OBJS) $(CXXFLAGS) $(CPPFLAGS) -o $(PROGRAM)
還是$(CC) $(OBJS) -o $(PROGRAM)
?
我應該更改為$(PROGRAM): $(OBJS) *.h
,所以每當.h
文件發生變化時它都會重建嗎?
它的任何其他改進?
在編譯C ++文件時,我會在編譯C文件和CXXFLAGS
時使用CFLAGS
。 除了CFLAGS
和CXXFLAGS
之外,您可能還缺少另一個相關變量: CPPFLAGS
。
我應該在
CXXFLAGS
或CFLAGS
添加-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.