【发布时间】:2017-11-05 10:03:36
【问题描述】:
我正在学习 linux,我的第一步是调整我的project 以在 linux 上运行。这是一个简单的 makefile(主要用于教育目的),它生成输出文件:
#------------------------BUILD VARIABLES-----------------------------
# Directories, containing headers
INCLUDE_DIR = ../Include/
# Output directory which will contain output compiled file
OUTPUT_DIR = ../Bin/Debug/
SOURCES = EngineManager.cpp Geometry.cpp Main.cpp Model.cpp \
Shaders.cpp TGAImage.cpp
HEADERS = EngineManager.h Geometry.h Line.h Model.h Shaders.h \
TGAImage.h Triangle.h
#------------------------BUILD_RULES---------------------------------
TinyRenderBuilding : $(addprefix $(INCLUDE_DIR), $(HEADERS)) $(SOURCES)
mkdir -p $(OUTPUT_DIR)
g++ -std=c++14 -o $(OUTPUT_DIR)TinyRender.out -g -I$(INCLUDE_DIR) $(SOURCES)
我不明白,为什么g++ 不生成调试符号?出现-g 选项
【问题讨论】:
-
尝试使用 -ggdb 标志而不是仅使用 -g。
-
您是否在构建之前删除了所有目标文件(尝试
make clean)? -
Linux 不是 Windows,对此感到抱歉。你需要了解更多。不要让您的 Windows 构建适应 Linux,而是从头开始编写一个新的
Makefile,也许使用更简单的源目录组织。拥有Source和Includes子目录只会让您感到困惑。对于像你这样的小项目,考虑一个平面源文件树。从其他免费软件项目中寻找灵感。 -
Linux 不使用任何
pdb文件(我从未听说过)。 DWARF 调试信息通常在.o目标文件中(有一些奇怪的方法可以在其他地方获取它,我从来没有这样做过)所以在你的 ELF 可执行文件中。
标签: c++ linux makefile gnu-make