c++ - 如何使用来自不同目录的make文件中的文件
问题描述
我有一个包含 src 文件夹中文件的小项目:functionAdd.cpp;函数减法.cpp; main.cpp 和我的 Makefile。在包含文件夹中,我得到了 functionAdd.hpp 和 functionSubtract.hpp。首先我有一个错误,比如找不到这两个 .hpp 文件。在参考了这个答案后,我制作了新的 Makefile。所以在这里我做了什么:
CC = g++
HEADER1 = home/administrator/Desktop/makefile-test/include/functionAdd.hpp
HEADER2 = home/administrator/Desktop/makefile-test/include/functionSubtract.hpp
CFLAGS = -c -Wall -Iinclude
all:calculation
calculation: main.o functionSubtract.o functionAdd.o
$(CC) main.o functionSubtract.o functionAdd.o -o calculation
main.o: main.cpp $(HEADER) $(HEADER2)
$(CC) $(CFLAGS) main.cpp
functionSubtract.o: functionSubtract.cpp $(HEADER2)
$(CC) $(CFLAGS) functionSubtract.cpp
functionAdd.o: functionAdd.cpp $(HEADER1)
$(CC) $(CFLAGS) functionAdd.cpp
clean:
rm -rf *o calculation
现在错误信息是: make: *** No rule to make target home/administrator/Desktop/makefile-test/include/functionSubtract.hpp,main.o需要。停止。
解决方案
假设源文件、头文件和 Makefile 是这样组织的:
src/Makefile
src/*.cpp
include/*.hpp
然后你可以使用:
- 相对路径而不是绝对路径(更便携,更不容易出错,更少打字),
- 制作自动变量(更通用,更不容易出错,更少打字),
- 制定模式规则。
CC = g++
HEADER1 = ../include/functionAdd.hpp
HEADER2 = ../include/functionSubtract.hpp
CFLAGS = -c -Wall -I../include
.PHONY: all clean
all: calculation
calculation: main.o functionSubtract.o functionAdd.o
$(CC) $^ -o $@
%.o: %.cpp
$(CC) $(CFLAGS) $< -o $@
main.o: $(HEADER) $(HEADER2)
functionSubtract.o: $(HEADER2)
functionAdd.o: $(HEADER1)
clean:
rm -rf *o calculation
更紧凑,更易于维护。
推荐阅读
- python - 使用其他字符串获取部分字符串
- symfony - Sonata Admin Bundle:按计数一对多关系排序
- python - MatPlotLib 在图例中从 df 创建标签
- postgresql - 单字符文本搜索替代
- laravel - 如何将 CSRF 令牌安全地传递到单独的 VueJS 前端?
- tensorboard - 如何在张量板中制作表格
- ruby-on-rails - Ruby on Rails Grape API 省略属性
- android - 数据显示为空,但 url 适用于 Postman
- php - OPENCART php 创建了新的控制器查询方法并查看获取空行
- windows - 命令提示符 - 使用批处理文件上传文件时出现“找不到文件”错误