【问题标题】:mingw makefile compiler not outputting everythingmingw makefile编译器不输出所有内容
【发布时间】:2018-05-29 05:38:36
【问题描述】:

我用 sdl 修复了一个错误,但 Quentin 发现了另一个问题。 (再次感谢您的通知。)

问题来了: 控制台中没有记录可执行文件中的任何内容,并且我遇到了一个错误,我必须使用 .c_str() 将变量转换为字符串,但由于某种原因,编译没有说明任何内容。

这是我的 makefile 的样子(我对 makefile 还不是很擅长,因为我不太了解它是如何工作的,但这就是我现在所拥有的):

#Is it in debug mode?
DEBUG=yes

SHELL='sh -x'

CC = G++

#OBJS specifies which files to compile as part of the project
OBJS = src/main.cpp

#OBJ_NAME specifies the name of the executable
OBJ_NAME = Game

INCLUDE_PATHS = -IC:/mingw_dev_lib/include/SDL2

LIBRARY_PATHS = -LC:/mingw_dev_lib/lib

COMPILER_FLAGS = -w -Wl,-subsystem,windows

LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image

#This is the target that compiles the executable
all : $(OBJS)
ifeq ($(DEBUG),yes)
        g++ $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) -g $(LINKER_FLAGS) -o Debug\$(OBJ_NAME)
else
        g++ $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o Release\$(OBJ_NAME)
endif

【问题讨论】:

  • 究竟是缺少.c_str() 导致的编译器错误,还是运行时错误?也就是说,如果您手动运行适当的g++ ... 命令,是否会报错?如果不是,请修改您的问题以显示有错误的代码,并询问我们为什么它会导致运行时错误。
  • 好吧,在我的SDL_Log() 中的字符串之后解析.c_str() 之前,显然应该会发生警告,但这里的问题是编译器应该明显地对该错误发出警告.另外,我想知道的是,从 MingWx64 控制台运行 game.exe 时,我也无法让可执行文件登录控制台。
  • 请停止混合编译和运行程序。您的问题与编译有关,然后我们讨论编译器错误/警告以及 makefile 使用、直接 g++ 编译之间的区别……或者我们在执行程序时讨论问题 - 然后您完全问错了问题。
  • 我从来没有问过可执行文件,它只是我写的,以防它在编译时与相同的问题有关。

标签: c++ makefile


【解决方案1】:

我想一旦你查看编译器标志,问题就很明显了......

看看:Disable all gcc warnings

然后意识到,您的 COMPILER_FLAGS = -w -Wl,-subsystem,windows 包含 -w 标志。您应该首先删除它(无论它最初存在的原因......)并包括-Wall(感谢@keltar 指出这一点),然后查看警告是否开始像您想要的那样出现。

【讨论】:

  • 我已经尝试删除 -w 并且我理解为什么它不应该放在首位。但是我没有设法从编译器那里得到任何警告。您能推荐一些网站来了解有关 makefile 的更多信息吗?
  • @Avarthar 你没有请求编译器应该生成什么警告;默认启用的标志特定于编译器版本。对于最常见的警告,您可以添加 -Wall(尽管名称如此,但它并未启用所有支持的警告)。还有其他选项,例如-Wextra,可以获得更多警告。参考 gcc 手册。
  • @Avarthar 如果您仍然需要帮助,您应该检查生成的编译器命令(请参阅stackoverflow.com/questions/5820303/…),如果找不到问题,请编辑您的问题以包含生成的命令。
  • 好的,非常感谢您的帮助。 @keltar -Wall-Wextra 工作得很好。现在我看到了我最初想要的每一个警告。
猜你喜欢
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多