【问题标题】:How to use a file in make file from different directory如何使用来自不同目录的make文件中的文件
【发布时间】:2018-10-13 05:46:39
【问题描述】:

我有一个包含 src 文件夹中文件的小项目:functionAdd.cpp;函数减法.cpp; main.cpp 和我的 Makefile。在包含文件夹中,我得到了 functionAdd.hpp 和 functionSubtract.hpp。首先我有一个错误,比如找不到这两个 .hpp 文件。在参考了这个answer 之后,我制作了新的 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需要。停下来。

【问题讨论】:

  • home/... 路径前面添加//home/...srcinclude 是同一个父目录的子目录吗?如果是,则有比指定绝对路径更简单的解决方案。
  • @RenaudPacalet 是的,它们是同一父目录的子目录。即使我解决了我的问题,看到你提到的更简单的解决方案仍然很有趣。

标签: c++ linux ubuntu makefile g++


【解决方案1】:

假设源文件、头文件和 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

更紧凑,更易于维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多