编写一个makefile,将.h .hpp和.cpp一起编译为可执行文件
Write a makefile to compile a .h .hpp and .cpp together into an executable
所以我有一个简单的问题。
我有List.hpp
, List.h
和test_list.cpp
文件
List.hpp包含List.h文件的函数定义。List.h文件在倒数第三行包含"List.hpp"。test_list.cpp运行程序,并在顶部包含"List.h"。
我需要一个makefile将这些编译成一个可执行的"project.x"。
目前为止有这个:
proj2: List.o test_list.o
gcc -o proj2.x List.o test_list.o
List.o:
gcc -c List.hpp
test_list.o:
gcc -c test_list.cpp
clean:
rm *.o proj2.x
然而,它会导致各种各样的错误,所有这些错误都是处理包含List <T>
的行,说明List
没有命名类型。我想这是因为我没有正确地包括头文件。
我该如何制作这个makefile?
根据文件名扩展名和你的描述判断,你正在编译c++代码。
因此,您应该使用c++编译器:g++
。gcc
是一个C编译器,不懂c++。
你应该让make为你编译代码,它知道该怎么做:
proj2: test_list.o
$(CXX) $(LDFLAGS) $(LDLIBS) -o $@
clean:
rm *.o proj2
通常不希望单独编译头文件。它旨在包含在源文件中,源文件就是您编译的内容。
考虑到典型make
实用程序中的隐式依赖关系,您可以稍微减少您的Makefile:
proj2.x: test_list.o
g++ -o proj2.x test_list.o
test_list.o: test_list.cpp List.hpp
clean:
-rm *.o proj2.x
至少假设Make
的最新版本,它已经知道如何编译.cpp
文件以获得.o
文件。
如果你有编译错误,至少很有可能它们来自代码中的问题,而不是Makefile中的问题。明显的例外是像你的c++代码不能正确链接,因为你使用gcc
而不是g++
来链接它。
作为题外话,标题依赖关系如下:
test_list.o: test_list.cpp List.hpp
…是gcc
可以用-MM
标志自动生成的东西。对于像这样一个小的Makefile,可能不值得去自动生成依赖,但是对于一个大的Makefile来说,这样做是值得的。您甚至可以将此作为Makefile本身的一个步骤,通过使用-MM
运行gcc来生成依赖项(将输出定向到一个文件),并将该文件包含到执行实际工作的Makefile中。
关于依赖生成以及如何在Makefile中使用它的更多信息:
http://scottmcpeak.com/autodepend/autodepend.html不编译。h或。hpp文件。只能编译。c或。cpp文件。你可能想要这样的东西(用制表符缩进,而不是空格,空格是SO和python的东西,制表符是makefile的东西):
proj2: list.cpp list.hpp list.h
g++ -o proj2.x list.cpp
clean:
rm proj2.x
同样,在你的C文件中,你需要:
#include "List.h" /* Note the quotes: *
#include <list.h> * won't work */
同样适用于您的#include "List.hpp"
。
- 如何将class.cpp和class.hpp编译为一个.o文件
- 编译器正在查找.当"实施"完全在"我的"中时的CPP文件.HPP文件
- 如何正确使用hpp文件和cpp文件中的嵌套类
- 从一个cpp中给出所使用的头文件和hpp文件的列表
- 如何在 CMakeList 中包含 h/hpp 头文件.txt而不是 cpp 或其他 hpp 文件
- CMake add_executable() 使用.cpp文件或 .hpp 文件
- 我可以使用 cmake/make 编译我使用的所有且仅编译 cpp/hpp 文件吗?
- 将函数及其实现移动到与主文件不同的文件(.hpp 和 .cpp)时,性能会受到很大影响
- 使用HPP时,使用H CPP时
- GCC:为什么编译.HPP文件与.cpp文件的结果不同
- 如何将C 中的类分为.hpp和.cpp文件
- 我有一个为 cpp 中的某个类定义的模板函数 - 不是 hpp.可以由子类使用吗?
- 如何使用 vim 中的 :tag 命令在 .hpp 和相应的.cpp之间切换
- G++编译.hpp和.cpp文件的方式与共享库不同
- 具有全局功能的hpp / cpp拆分:.的多重定义.错误
- 在 C++ 中编译多个 .hpp 和 .cpp 文件时出错
- cpp hpp separation
- 链接器错误,hpp和cpp文件添加到库中
- 如何从实现(.cpp文件)中提取声明(.hpp文件)
- class template cpp, hpp, cpp