【问题标题】:Include headers in MakeFile在 MakeFile 中包含标题
【发布时间】:2014-01-27 01:01:09
【问题描述】:

我正在尝试将我的头文件包含在 makefile 中,这样每次我编辑没有相应 cpp 文件的头文件时,我都不必make clean && make

编辑

到目前为止,我有这个:

# Declaration of variables
CC = g++
CC_FLAGS = -Wall -g 

# File names
EXEC = Main
DEPS = MoveLogic.hpp
SOURCES = $(wildcard *.cpp) $(wildcard Pieces/*.cpp)
TARGET = $(SOURCES:.cpp=.o) 
TARGET_DEPS = $(DEPS:.hpp=.o) 

# Main target
$(EXEC): $(TARGET) $(TARGET_DEPS)
    $(CC) $(TARGET) $(TARGET_DEPS) -o $(EXEC)

# To obtain dependanies
%.o: %.hpp
    $(CC) $(DEPS) -o $@

# To obtain object files
%.o: %.cpp
    $(CC) -c $(CC_FLAGS) $< -o $@

# To remove generated files
clean:
    rm -f $(EXEC) $(TEST) $(TARGET)

但我得到了错误

 ignoring file MoveLogic.o, file was built for unsupported file format ( 0x43 0x50 0x43 0x48 0x01 0x0C 0x00 0x00 0x27 0x08 0x00 0x00 0x0B 0x02 0x68 0x42 ) which is not the architecture being linked (x86_64): MoveLogic.o

【问题讨论】:

  • 您正在寻找的是依赖生成。 GCC -MM 或 -MT 开关是您解决方案的开始。寻找相关的 SO 问题。 makefile dependency
  • @KeithSmith 我还是很困惑
  • 您是如何使用DEPS 变量的?
  • @Matthias 到目前为止,我将其添加到 SOURCES = ... $(DEPS) ......但我得到了 clang: error: cannot specify -o when generating multiple output files 所以我没有更多
  • 我通常手动放置依赖项以便只编译需要的内容(但这是一个可维护性混乱):foo.cpp: foo.h bar.h baz.h

标签: c++ makefile header-files


【解决方案1】:

您不得将标头添加到SOURCE 变量中:所有不是.cpp 文件的元素都直接进入将被清理的TARGET

如果标题名称与您可能使用的源名称相对应:

# To obtain object files
%.o: %.cpp %.h
    $(CC) -c $(CC_FLAGS) $< -o $@

但是,您会错过一般的头文件。最好的方法是按照 KeithSmith 的建议使用 auto debendencies。

【讨论】:

  • 如果我做了它然后在我重新运行时对 foo.hpp 进行更改(在此示例中),这仍然不起作用使其不考虑 foo.hpp 中的更改跨度>
  • 很抱歉打扰您,请您解释一下自依赖是如何工作的
  • question 中查看 pmod 的答案。
  • 请查看更新问题,这就是我目前所拥有的 - 从查看建议的链接
  • 您正在尝试仅编译头文件(即gcc -Wall -g MoveLogic.h),因为您正在使用自动变量$&lt;。只使用一个规则。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2018-02-27
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2017-10-12
相关资源
最近更新 更多