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

时间:2018-06-10 12:01:58

标签: c++ c c++11 makefile gnu-make

首先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]) 文件发生更改时重建吗?

对它有任何其他改进吗?

1 个答案:

答案 0 :(得分:3)

我在编译C文件时使用CFLAGS,在编译C ++文件时使用CXXFLAGS。除了CFLAGSCXXFLAGS之外,您可能还缺少其他相关变量: 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),您只需分别使用自动变量$@$^