2017-05-13 3 views
1

私はこのメークファイルをかなり長時間使っていますが、私の問題の解決策を見つけることができません。ここではメイクファイルは次のとおりです。メークファイルにインクルードが見つかりません

# Compiler: 
CPPFLAGS = $(OPT_FLAGS) $(DEBUG_FLAGS) $(STANDARD_FLAGS) \ 
      $(WARN_AS_ERRORS_FLAGS) 

# Source files, headers, etc.: 
OBJ_DIR  = $(CX_BUILD_ROOT)/tests/unit 
OUT_DIR  = $(CX_BUILD_ROOT)/tests/unit 
INCLUDES  = -I$(CX_SRC_ROOT)/cXbase/publicAPI 
LIBINCLUDES = -L$(CX_BUILD_ROOT)/connectx/libs 
VPATH  = tests 

SRCS  = cxUnitTests.cpp\ 
      test_Player.cpp\ 
      test_Name.cpp\ 
      test_Game.cpp\ 
      test_GameBoard.cpp\ 
      test_Disc.cpp\ 
      test_Color.cpp\ 
      test_AsciiColorCode.cpp\ 

OBJS  = test_Player.o\ 
      test_Name.o\ 
      test_Game.o\ 
      test_GameBoard.o\ 
      test_Disc.o\ 
      test_Color.o\ 
      test_AsciiColorCode.o\ 

LIBS  = -lgtest\ 
      -lgtest_main\ 
      -lpthread\ 
      -lcXbase 

# Product: 
MAIN = cxUnitTests.out 


all: make_dir $(MAIN) 

$(MAIN): $(OBJS) 
    @echo Invoquing GCC... 
    $(CPPC) $(LIBINCLUDES) -o $(OUT_DIR)/$(MAIN) $(OBJS) $(LIBS) 
    @echo $(MAIN) has been compiled and linked! 

$(OBJ_DIR)/%.o: %.cpp 
    @echo Invoquing GCC... 
    $(CPPC) $(CPPFLAGS) $(INCLUDES) -c $< -o [email protected] 
    @echo Object files created! 

make_dir: 
    mkdir -p $(OBJ_DIR) 
    mkdir -p $(OUT_DIR) 

clean: 
    @echo Removing object files... 
    $(RM) $(OBJ_DIR)/*.o 
    @echo Object files removed! 

mrproper: clean 
    @echo Cleaning project... 
    $(RM) $(OUT_DIR)/$(MAIN) 
    @echo Project cleaned! 

depend: $(SRCS) 
    @echo Finding dependencies... 
    makedepend $(INCLUDES) $^ 
    @echo Dependencies found! 

「ソースファイル、ヘッダなど」セクションにあるすべての値がこのメイクファイルは、彼らがすべての@echo編得られた値とすることができます$(MAKE) -Cオプション付きで起動され、そこから他のメイクファイルで定義されています良いです。私はmakeを実行すると、私が手:

g++ -g3 -std=c++0x -pedantic-errors -Wall -Wextra -Werror -Wconversion -c -o test_Player.o tests/test_Player.cpp

tests/test_Player.cpp:36:30: fatal error: publicAPI/Player.h: No such file or directory

makeが何らかの理由でINCLUDES変数のコンテンツにアクセスすることができないようです。私はGnu-makeを使います。

何が間違っていますか?

よろしく

答えて

1

メイクは、あなたのパターンルール$(OBJ_DIR)/%.o: %.cppは、オブジェクトのリストと一致しないため、C++ファイルをコンパイルするためのビルトインルールを使用しています。偶然にも、組み込みレシピが使用する変数(CPPFLAGS)の1つを使用しましたが、makeはINCLUDESを使用しません。それは私が最終的に問題を発見

OBJS := $(addprefix $(OBJ_DIR)/,$(OBJS)) 
+0

ソリューションは機能し、より洗練されています。私はそれを受け入れる。 – BobMorane

0

オブジェクトのリストの後に次のようなものを置くことであろう修正する

一つの方法。実際には、二人はあった:

  1. エラーメッセージが示すように、Player ためのインクルードファイルをpublicAPI/Player.h内で検索され、以来INCLUDES変数がそうpublicAPIがあった代わり$(CX_SRC_ROOT)/cXbase/publicAPI$(CX_SRC_ROOT)/cXbaseに設定されているはずでが2回表示されましたが、@echoでは2回表示されませんでした。
  2. 私のオブジェクトリストは、$(OBJ_DIR)/objectFile.oの形式である必要があります。
関連する問題