簡體   English   中英

帶有子目錄的 Makefile 找不到標題

[英]Makefile with subdirectories does not find headers

我有以下目錄結構(在 Ubuntu 上):

MyProject/
    Here is my Makefile
MyProject/src/headers
    Here are more subfolders and .hpp files
MyProject/src/sources
    Here are two .cpp files (main.cpp and another.cpp)

所以我使用教程來編寫我的 makefile,它看起來像這樣:

cppsrc = $(wildcard src/sources/*.cpp)
obj = $(cppsrc:.cpp=.o) 
flags = -I/usr/include/boost_1_72_0/ -pthread 

cross: $(obj)   
      i686-atom-linux-gnu-g++ -o $@ $^ $(flags)

它檢測子目錄中的 .cpp 文件(是的!)。 但它不會檢測 .cpp 文件中包含的頭文件。 所以我在 another.cpp 中包含了這樣的標題:

#include "src/headers/another.hpp"

命令 make cross 給了我這個錯誤信息:

g++    -c -o src/sources/another.o src/sources/another.cpp
src/sources/another.cpp:6:10: fatal error: src/headers/another.hpp: No such file or directory
 #include "src/headers/another.hpp"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
<builtin>: recipe for target 'src/sources/another.o' failed
make: *** [src/sources/another.o] Error 1

錯誤消息讓我相信 makeapp 在這樣的位置尋找頭文件:

MyProject/src/sources/src/headers/

我的假設正確嗎? 我能做些什么來解決這個問題? 希望有人能夠幫助我。 先感謝您。

您忘記告訴編譯器查看本地目錄 ( -I. ),但有一個更嚴重的問題:您正在使用 HOST 編譯器編譯文件,並使用 CROSS 編譯器將它們鏈接在一起。 這將導致錯誤。

要修復它,您需要設置默認COMPILE.cc規則中使用的變量,定義如下:

COMPILE.cpp = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
%.o: %.cpp
#  commands to execute (built-in):
        $(COMPILE.cpp) $(OUTPUT_OPTION) $<

所以在你的情況下:

CXX = i686-atom-linux-gnu-g++
CXXFLAGS += -I. -I/usr/include/boost_1_72_0/
LDFLAGS += -lpthread

cppsrc = $(wildcard src/sources/*.cpp)
obj = $(cppsrc:.cpp=.o) 

cross: $(obj)
      $(CXX) -o $@ $^ $(LDFLAGS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM