gpt4 book ai didi

c++ - 在 Makefile 的什么地方放东西(CFLAGS 或 CXXFLAGS)?

转载 作者:太空狗 更新时间:2023-10-29 21:11:22 26 4
gpt4 key购买 nike

首先这里的Makefile

CFLAGS   = -g -Wall -lm

那时候我在玩C。现在我在 C++ 上,我必须添加 -I eigen,快速谷歌一下,发现 CXXFLAGS 存在于 C++ 世界,而 CFLAGS 存在于 C 世界。所以我将 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)

我应该将 -I eigen 添加到 CXXFLAGS 还是 CFLAGS

同时注意到 CPPFLAGS 的存在。

我应该更改为 $(CC) $(OBJS) $(CXXFLAGS) $(CPPFLAGS) -o $(PROGRAM)$(CC) $(OBJS) -o $(PROGRAM)?

我是否应该更改为 $(PROGRAM): $(OBJS) *.h,以便在 .h 文件发生更改时重建?

还有其他改进吗?

最佳答案

我会在编译 C 文件时使用 CFLAGS,在编译 C++ 文件时使用 CXXFLAGS。除了 CFLAGSCXXFLAGS 之外,您可能还缺少另一个相关变量:CPPFLAGS

Should I add -I eigen to CXXFLAGS or CFLAGS?

CPPFLAGS 通常用于提供与预处理器相关的选项。我会使用这个变量来指定包含目录:

CPPFLAGS = -I eigen

另一个对提供库很有用的有趣变量是 LDLIBS。您可以利用它传递 -lm:

LDLIBS = -lm

Should I change to $(PROGRAM): $(OBJS) *.h, so it rebuilds whenever .h files get changes?

我推荐的方法是通过编写不带配方的规则,将头文件的先决条件添加到相应的目标文件中,例如:

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),您可以简单地使用自动变量$@$^,分别。

关于c++ - 在 Makefile 的什么地方放东西(CFLAGS 或 CXXFLAGS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50783479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com