【问题标题】:How to compile g++ multiple files (It does not work for me)如何编译 g++ 多个文件(它对我不起作用)
【发布时间】:2015-10-15 19:04:28
【问题描述】:
# Compiler to use
CC = g++

# flags to pass compiler
CFLAGS = -ggdb3 -O0 -std=c99 -Wall -Werror

# Name for the executable
EXE = test

# space-separated list of header files
HDRS = simplegui.h globals.h timer.h tile.h gamesprites.h

# space-separated list of libraries, if any,
# each of which should be prefixed with -l
LIBS = -lSDLmain -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf

# space-separated list of source files
SRCS = main.cpp gamesprites.cpp simplegui.cpp tile.cpp timer.cpp

# automatically generated list of object files
OBJS = $(SRCS:.cpp=.o)

# default target
$(EXE): $(OBJS) $(HDRS) Makefile
    $(CC) -IC:\SDL-1.2.15\include -LC:\SDL-1.2.15\lib $(CFLAGS) -o $@ $(OBJS) $(LIBS)

# dependencies 
$(OBJS): $(HDRS) Makefile

它不适用于 makefile。我的另一种方法是:

g++ -IC:\SDL-1.2.15\include -o test main.cpp -LC:\SDL-1.2.15\lib -lSDLmain -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer

它最初有效,我不知道我更改了什么,不,它不起作用,它一直告诉它找不到目录。以前它确实找到了目录,但对我大喊依赖关系。我很沮丧找不到答案。如何编译具有许多 .h .cpp 文件并且在其他目录中有 .h 文件的程序?我展示的两种方法都不起作用......(但是我可以使用配置的 IDE 编译代码,但我不记得如何,我将很快格式化我的电脑。

编辑:

编辑:将 \ 更改为 /,现在我有了这个:

【问题讨论】:

  • 您给出的 g++ 命令乍一看似乎很合理。你能澄清一下你遇到的问题吗? “它一直告诉我它找不到目录” - 它找不到哪个目录?您是否检查过该目录确实存在?
  • 是的,目录存在。这就是我在 IDE 中配置编译器和链接器的方式。但我需要知道如何从命令行或使用 makefile 编译它。它一直告诉我它没有找到“SDL/SDL.h”。但是,在我的电脑中,C:\SDL-1.2.15\include 包含文件夹 SDL,其中它是 SDL.h,与链接器目录相同。当我可以“编译”时,它只是因为依赖而对我大喊大叫(我没有使用我拥有的所有源代码)。但是,即使添加所有内容,它也会不断抛出该错误(现在它甚至不适用于 g++)。我也有没有 cpps 的标题
  • 我认为它不喜欢 $(EXE): $(OBJS) $(HDRS) Makefile 因为 $(HDRS) 是 simplegui.h globals.h timer.h tile.h gamesprites.h 但它们不存在于当前目录中。但如果没有实际的错误消息,我只是在猜测。
  • 我在使用 \ 时遇到了问题,更改为 /,现在它尝试编译,但是仍然出现很多编译器错误(在我的 IDE 上编译时没有)跨度>

标签: c++ compiler-errors makefile header g++


【解决方案1】:

不是最好的解决方案,但我是个傻瓜。我有“冗余”代码,当我编写以下 Makefile 时它得到了修复:

# Compilador a utilizar
CC = g++

# Libraries
LIBS = -lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer

# Codigo
SRC = main.cpp timer.cpp simplegui.cpp gamesprites.cpp

# Object files
OBJS = $(SRC:.cpp=.o)

# Nombre del ejecutable
EXE = juego_naves

all: $(SRC) $(EXE)

$(OBJS):
    g++ -IC:/SDL-1.2.15/include -c $(SRC)

$(EXE): $(OBJS)
    g++ -LC:/SDL-1.2.15/lib -o $@ $(OBJS) $(LIBS)

clean:
    rm -rf *.o $(EXE).exe

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2015-01-05
    • 2011-03-13
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多