在Makefile上放东西(CFLAGS或CXXFLAGS)在哪里
Where to put things (CFLAGS or CXXFLAGS) on Makefile?
首先这里的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
?
还注意到CCD_ 13的存在。
我应该换成$(CC) $(OBJS) $(CXXFLAGS) $(CPPFLAGS) -o $(PROGRAM)
吗还是$(CC) $(OBJS) -o $(PROGRAM)
?
我是否应该更改为$(PROGRAM): $(OBJS) *.h
,以便在.h
文件发生更改时重新构建?
还有其他改进吗?
编译C文件时我会使用CFLAGS
,编译C++文件时使用CXXFLAGS
。除了CFLAGS
和CXXFLAGS
之外,您可能还缺少另一个相关变量:CPPFLAGS
。
我应该将
-I eigen
添加到CXXFLAGS
还是CFLAGS
?
CPPFLAGS
通常用于提供与预处理器相关的选项。我会使用这个变量来指定include目录:
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)
,只需分别使用自动变量$@
和$^
即可。
- 如何在不更改CMakeLists.txt的情况下(可能通过CLI)将CFLAGS和CXXFLAGS传递给cmake
- 在Makefile上放东西(CFLAGS或CXXFLAGS)在哪里
- 使用 CXXFLAGS 在我的制作文件中C++ 11 个支持
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- 如何在Visual Studio Code中使用'pkg-config gtkmm-3.0 --cflags --lib
- cc_prebuilt_library_shared模块无法识别的属性"cflags"
- 如何打印预定义的cflags
- 如何指定 gcc 标志 (CXXFLAGS) 特别是对于特定模块
- 我可以在生成文件中为 CC、CFLAGS 使用其他名称,或者将它们硬连接到 GNU make 中
- 通过GCC标志-std=c++11 CXXFLAGS或CXX或CFLAGS
- 编辑 Makefile 行:来自 Qt C++的 CFLAGS
- 如何从我的 jamfile 中将 cxxflags 传递给 Boost 库
- CFLAGS=-std=c++11 -O3 -wall -pedantic在makefile中无法识别
- 根据当前操作系统更新makefile中的CFLAGS或LDFLAGS
- 如何在CMake的CXX_FLAGS中包含“pkg-config——cflags——libs gtk+-2.0”
- 错误:"CFLAGS"未命名类型
- CXXFLAGS对Qt pro文件的修改
- 在Rcpp Makevars中设置CXXFLAGS