最近在學習C++中的makefile,簡單做了個示例,可一直顯示找不到頭檔案,備受打擊(是在win7 32位上利用cygwin模擬的linux環境,make的版本是GNU Make 4.3)。
Makefile所在目錄如下,其中demo.cpp是待編譯檔案。

demo.cpp的代碼很簡單,如下。
#include <iostream>
#include <common.h>
#include <types.h>
using namespace std;
int main()
{
cout<<"This is the demo!"<<endl;
}
其中,common.h檔案在demo.cpp檔案所在目錄的上一個目錄中的common檔案夾中,如下所示


makefile檔案內容如下:
INCDIR = -I../common/ #-I/home/ShenTao/repository/c_cpp/common/common.h
LIB=-lthread
CXX=g++ -std=c++11
CXXFLAG=-Wall -g -O2
TARGET=demo
OBJECT=demo.o
$(ALL):$(OBJECT)
$(CXX) $(INCDIR) $(CXXFLAG) $^ -o $@ $(LIB)
%*.o:%*.cpp
$(CXX) $(INCDIR) $(CXXFLAG) -c $^ -o $@ $(LIB)
.PHONY:clean
clean:
rm -rf $(TARGET) $(OBJS)
@echo "Removing linked and compiled files......"
但是總是說找不到common.h檔案

請問是什么原因?萬分感謝!
uj5u.com熱心網友回復:
INCDIR變數后面的等號兩邊的空格去掉再試試INCDIR=-I../common
uj5u.com熱心網友回復:
謝謝回答,不過還是不行~
uj5u.com熱心網友回復:
用全路徑呢,自己摸索吧uj5u.com熱心網友回復:
用過全路徑,也不行uj5u.com熱心網友回復:
#include <common.h>難道不是尋找庫檔案嗎?
#include <common.h>
#include “common.h”
這兩個應該還是有差別的把
uj5u.com熱心網友回復:


手動寫了個,編譯沒問題。注意一下第二張圖的-I../common/ ,你的根本就沒列印,檢查一下你的Makefile格式
uj5u.com熱心網友回復:
多謝指點!!!
問下:你的是不是在Linux環境下測驗的?
我又試了幾次,發現一個奇怪的現象,我把common中的頭檔案全部放到和demo.cpp同在一個目錄下,這種情況下都不行,理論上這時都不需要指定搜索路徑的!
另外,為了防止Makefile格式帶來的影響,我利用notepad++新建一個空檔案,采用utf-8編碼格式,重新撰寫了下Makefile檔案,運行顯示還是有上面找不到的錯誤。
但是在同樣的Makefile檔案中,我把-I../common/加到CXX變數后,就可以編譯成功了。如下所示:
LIB=-lthread
CXX=g++ -std=c++11 -I../common/
CXXFLAG=-Wall -g -O2
TARGET=demo
OBJECT=demo.o
$(ALL):$(OBJECT)
$(CXX) $(CXXFLAG) $^ -o $@ $(LIB)
%*.o:%*.cpp
$(CXX) $(CXXFLAG) -c $^ -o $@ $(LIB)
clean:
rm -rf $(TARGET) $(OBJS)
@echo "Removing linked and compiled files......"
所以我感覺可能還是Windows+cygwin這個環境引起的。。。
uj5u.com熱心網友回復:
首先,第一個問題,如果你把common.h放到demo.cpp同一路徑下,是不是demo.cpp中要修改成這樣#include “common.h”。
我是在linux下編譯的。
Makefile中可以echo的,試試加幾個echo,列印出你想要的資訊看看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35910.html
標籤:C++ 語言
