编写C++的Makefile可以帮助我们自动化编译和构建我们的代码。下面是一个示例的解决方法:
假设我们有以下的C++源文件:
// main.cpp
#include
#include "hello.h"
int main() {
hello();
std::cout << "Hello, C++!" << std::endl;
return 0;
}
// hello.h
#ifndef HELLO_H
#define HELLO_H
void hello();
#endif
// hello.cpp
#include
#include "hello.h"
void hello() {
std::cout << "Hello from hello.cpp!" << std::endl;
}
我们可以编写一个Makefile来编译这些源文件。
# 编译器设置
CXX := g++
CXXFLAGS := -std=c++11
# 目标文件
TARGET := main
# 源文件
SRCS := main.cpp hello.cpp
# 生成目标文件
OBJS := $(SRCS:.cpp=.o)
# 默认目标
all: $(TARGET)
# 链接目标文件
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)
# 编译目标文件
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# 清理目标文件
clean:
rm -f $(OBJS) $(TARGET)
在Makefile中,我们首先设置了编译器和编译选项。然后,定义了目标文件名和源文件名。接着,我们使用了变量替换来生成目标文件列表。在默认目标all
中,我们链接目标文件生成可执行文件。在编译目标文件规则中,我们使用自动变量$<
和$@
来表示当前依赖的源文件和目标文件。
对于这个Makefile,可以通过在终端中执行make
命令来编译和构建代码。执行make clean
可以清理生成的目标文件和可执行文件。
希望这个示例的解决方法可以帮助你编写C++的Makefile。