【问题标题】:My makefile isn't finding my include paths我的 makefile 没有找到我的包含路径
【发布时间】:2011-05-01 23:56:00
【问题描述】:

简单地说:它没有找到包含路径:

CC = g++
OBJS = *.o #*/*.o

DEBUG = -g
PNAME = game
INCLUDES = -Iheaders

CFLAGS = -Wall $(DEBUG)
LFLAGS = -Wall -lsfml-graphics -lsfml-window -lsfml-system $(DEBUG)

all: build

build: $(OBJS)
    $(CC) $(LFLAGS) $(OBJS) -o $(PNAME)

clean:
    \rm *.o *~ $(PNAME)

.cpp:
    $(CC) $(CFLAGS) $(INCLUDES) -c $(.SOURCE)

【问题讨论】:

  • makefile 对包含路径没有任何作用。我认为您的意思是 compiler 找不到包含路径...您从编译器获得的错误消息是什么?

标签: c++ gcc makefile include-path


【解决方案1】:

在我看来,您的 makefile 看起来很糟糕。首先,您可能想要:

OBJS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))

其次,您的最终规则需要更像:

%.o: %.cpp
    $(CC) $(CFLAGS) $(INCLUDES) -c $^ -o $@

【讨论】:

  • 复杂的 makefile 不是我的强项。
  • @Mike:澄清一下,OBJS = *.o 将字符串*.o 粘贴到$(OBJS) 出现的任何地方;这很少是你想要的。上面的版本将OBJS 的值设置为所有.cpp 文件的列表,后缀由.o 替换(记住目标文件还不存在,所以你不能搜索它们!)。修改后的规则表达了如何从对应的 .cpp 文件构建任何 .o 文件。 $^$@ 是分别解析为依赖项(即 .cpp)和目标(即 .o)的特殊变量。
  • 我知道 makefile 中宏的本质,只是不知道后者。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多