首先Makefile
来了
CFLAGS = -g -Wall -lm
那段时间我正在玩C
。现在我正在C++
,我必须添加-I eigen
,快速使用谷歌,发现CXXFLAGS
世界存在C++
,而CFLAGS
存在C
Makefile
世界。CFLAGS = -g -Wall -lm
CXXFLAGS = -I eigen
所以我将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)
然后我找到https://wiki.gentoo.org/wiki/GCC_optimization,并受到启发再次更新
-I eigen
完整的事情:
CXXFLAGS
我应该将CFLAGS
添加到CPPFLAGS
还是$(CC) $(OBJS) $(CXXFLAGS) $(CPPFLAGS) -o $(PROGRAM)
?
还注意到$(CC) $(OBJS) -o $(PROGRAM)
的存在。
我应该更改为$(PROGRAM): $(OBJS) *.h
还是.h
?
我应该更改为append()
,以便在res = pd.DataFrame()
while True:
df_to_append.set_index('datetime', inplace=True)
res = pd.concat([res, df_to_append])
文件发生更改时重建吗?
对它有任何其他改进吗?
答案 0 :(得分:3)
我在编译C文件时使用CFLAGS
,在编译C ++文件时使用CXXFLAGS
。除了CFLAGS
和CXXFLAGS
之外,您可能还缺少其他相关变量: CPPFLAGS
。
我应该将
-I eigen
添加到CXXFLAGS
还是CFLAGS
?
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)
,您只需分别使用自动变量$@
和$^
。