- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先这里的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
。除了 CFLAGS
和 CXXFLAGS
之外,您可能还缺少另一个相关变量:CPPFLAGS
。
Should I add
-I eigen
toCXXFLAGS
orCFLAGS
?
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/
我正在尝试使用两个文件编译 NodeJS native 模块:1 个 .c 文件和 1 个 .cpp 文件。这是我的“wscript”文件的样子: def set_options(opt): op
我正在尝试将 Make 项目转换为 Bazel。目前,makefile 检测正在使用的编译器并相应地设置某些 CXXFLAGS(并非所有编译器都能理解所有标志)。 例如: ifeq ($(shell
我正在使用 GNU make 编译我的 C++ 代码,我想了解如何使我的编译可定制。 我在不同的地方读到 CFLAGS、CCFLAGS 和 CXXFLAGS 用于此目的。那么我应该如何使用它们呢?如果
我正在使用GNU make来编译我的C++代码,并且我想了解如何使我的编译可定制。 我在不同的地方阅读了CFLAGS,CCFLAGS和CXXFLAGS用于此目的。那么我应该如何使用它们呢?如果我对编译
在 dirA/SConscript 中我有: Import('env') probeenv = env.Clone() probeenv['CXXFLAGS'] += ['-fno-rtti','-
我已经阅读了一些安装,我需要正确设置环境变量LDFLAGS、LD_LIBRARY_PATHS和CXXFLAGS才能运行./compile.sh。但是,我不确定在那里提供什么路径。有人可以解释一下这些标
我最近正在构建一个新的 NS3 模块。在我的代码中,我使用了 C++11 (c++0x) 的一些新特性,我想添加一个 gcc flags (CXXFLAGS) "-std=c++0x " 到 waf
我想在 Golang 中调用 C 代码: // #cgo CFLAGS: -I/usr/include/c++/8.1.1/bits // #cgo CXXFLAGS: -std=gnu++11 //
在我的机器上,variant=release 的 cxxflags 默认为 -O3。 我需要将其更改为-O2。 请告知如何进行。 如果有人可以就此提出建议,我也可以定义新的变体。 最佳答案 只需使用:
典型的 makefile 通常使用内置变量 CFLAGS、CXXFLAGS、CPPFLAGS 等1设置传递给 C、C++ 或其他编译器/工具的标志。原则上,有时这甚至可以让您完全避免编写编译配方,因为
在编译我的 C++ 程序之前,我从命令行exported CXX 和 CXXFLAGS。 $ export CXX="/media/space/gcc-dist/bin/g++" $ export C
我想在 Rcpp 项目的 Makevars 中将 C++ 编译器标志设置为 -O0。 如果我看一下/etc/R/Makeconf,我发现编译命令似乎是 $(CXX) $(ALL_CPPFLAGS) $
我尝试构建的项目有默认标志 CFLAGS = -Wall -g -O2 CXXFLAGS = -g -O2 我需要向这两个变量附加一个标志 -w (以删除:“将所有警告视为错误”) 我有一个方法可以解
我需要使用 bjam 添加编译器标志。因此,要么我需要一种方法来附加到现有标志——比如 CXXFLAGS+=whatever using gmake——要么我需要知道 cxxflags 当前使用的值,
首先这里的Makefile有 CFLAGS = -g -Wall -lm 那时候我在玩C。现在我在 C++ 上,我必须添加 -I eigen,快速谷歌一下,发现 CXXFLAGS 存在于 C++
是否有强制生成的 makefile 读取 CXXFLAGS 的选项?和 CFLAGS变量并像大多数makefile一样使用它们? 最佳答案 Eclipse CDT 生成的 makefile 包含以下几
我只想调试在 Linux 上运行的一些代码,并且需要调试版本 ( -O0 -ggdb )。所以我将这些东西添加到我的 CMakeLists.txt 中 文件: set(CMAKE_BUILD_TYPE
GNU Make 中的 CPPFLAGS 和 CXXFLAGS 有什么区别? 最佳答案 CPPFLAGS 应该是 C PreP 处理器的标志; CXXFLAGS 用于 C++ 编译器的标志。 make
我有一个项目有一些要求,其中之一是设置 c++11 编译器/链接器标志: jamroot.jam: project : requirements clang:"-stdlib=li
我真的需要一些基本问题的帮助。我即将永远放弃学习 GCC,因为基础知识对我来说似乎没有意义。我已经阅读了数百篇文章,但无法弄清楚如何通过 configure 获得基本的 -std=c++11 工作调用
我是一名优秀的程序员,十分优秀!