C++ g++;不生成调试符号

C++ g++;不生成调试符号,c++,linux,makefile,gnu-make,C++,Linux,Makefile,Gnu Make,我正在学习linux,我的第一步是使我的系统适应在linux上运行。下面是简单的makefile(主要用于教育目的),它生成输出文件: #------------------------BUILD VARIABLES----------------------------- # Directories, containing headers INCLUDE_DIR = ../Include/ # Output directory which will contain output com

我正在学习linux,我的第一步是使我的系统适应在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
选项出现了

我不完全确定,但您可以尝试-g或-ggdb。您可以对这些选项进行一些研究。我们使用这些参数用gdb工具调试C程序。

根据您的makefile
g++
应该生成调试符号(
-g
选项出现)。要确认这一点,您可以对生成的二进制文件运行
文件

$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9fe588c18099ef418daf288931bb033cc287922e, with debug_info, not stripped

(注意
在输出中使用debug_info
字符串)

尝试使用-ggdb标志,而不仅仅是-g。如何确保不生成格式的调试信息?你的版本是什么?尝试使用
g++-v
。编辑您的问题以改进它。您是否在生成之前删除了所有对象文件(请尝试
makeclean
)?Linux不是Windows,对此表示抱歉。你需要了解更多。不要让Windows构建适应Linux,而是从头开始编写一个新的
Makefile
,也许可以使用一个更简单的源目录组织。拥有
Source
Includes
子目录只会让您感到困惑。考虑一下像你这样的小项目,一个扁平的源文件树。看看其他自由软件项目的灵感。Linux不使用任何
pdb
文件(我从来没有听说过)。DWARF调试信息通常在
.o
对象文件中(有一些奇怪的方法可以从别处获取,我从来没有这样做过),所以在ELF可执行文件中。