0

解決済み:理由と方法が完全にはわかりませんが、-I~/dlib-18.18 から -I../dlib-18.18 に変更すると機能します。

dlib ライブラリを使用してプログラムをコンパイルするメイクファイルを作成しようとしています。ライブラリをルートディレクトリにダウンロードしてインストールしました。

.cpp ファイルのヘッダーは次のとおりです。

#include "dlib/optimization.h"
#include <iostream>

dlib フォルダーは dlib-18.18 内に含まれており、optimization.h は実際には dlib フォルダー内にあります。

以下は私のmakefile(またはその一部)です。関連するディレクトリを CFLAGS に含めました。ただし、コンパイル中にg ++はoptimization.hが見つからないと言います(そのようなファイルまたはディレクトリはありません)

EXUCUTABLE = graph

CXX = g++
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic

############### Rules ###############

all: ${EXUCUTABLE}

clean:
    rm -f ${EXUCUTABLE} *.o
## Compile step (.cpp files -> .o files)

%.o: %.cpp
    ${CXX} ${FLAGS} ${CXXFLAGS} -c $< 

graph: graph.o
    ${CXX} ${FLAGS} $^ -o $@

ターミナルメイク用出力

ターミナルからアクセスした場合の /dlib-18.18/dlib フォルダー

4

1 に答える 1

0

You got your pattern wrong:%.o: %.cルールが.cファイル (ファイルではなく .cpp) のコンパイルに関するものであることを示します。

その結果、この規則は適用されず、GNU Make は C++ コードをコンパイルするための独自の既定の規則のセットにフォールバックします。

代わりにこれを試してください (dlib と一貫性があり、.cppC++ ファイルの拡張子を使用していると仮定します):

CXX = g++
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic

# To get *any* .o file, compile its .cpp file with the following rule.
%.o: %.cpp
    $(CXX) $(FLAGS) $(CXXFLAGS) -c $<

ここで、g++ コマンド ラインのオプションmake -Bのコンパイラ出力を実行して確認します。-I~/dlib-18.18

于 2016-04-17T23:32:56.450 に答える