2016-10-14 3 views
0

このメイクファイルは、.oファイルをsrc/branch/に、またメイクファイルを含む最上位のプロジェクトディレクトリに生成します。メイクファイルが現在のディレクトリにオブジェクトファイルを生成するのはなぜですか?

CXX := g++ 
SRC += $(wildcard src/file/*.cpp) 
SRC += $(wildcard src/random/*.cpp) 
SRC += $(wildcard src/termui/*.cpp) 
SRC += $(wildcard src/graphics/*.cpp) 
SRC += $(wildcard src/memory/*.cpp) 
SRC += $(wildcard src/*.cpp) 
OBJ := $(SRC:.cpp=.o) 
MAIN=ProcC 
CXXFLAGS := -g -fPIC -std=c++11 -fpermissive 
LIBS := -lboost_system -lboost_serialization -lboost_filesystem 

LIBDIR = -L ~/c/libraries/boost/lib -L ~/c/libraries/SFGUI-0.3.0/lib 

INCDIR = -I include/ -I ~/c/libraries/boost/include/ 


.PHONY: depend clean 

all: $(MAIN) 
    @echo Successfully compiled ProcC source code 

$(MAIN): $(OBJ) 
    @echo Linking ProcC objects and dependencies into executable. 
    $(CXX) $(CXXFLAGS) $(INCDIR) $(LIBDIR) -c $(SRC) $(LIBS) 
    rm *.o 

.cpp.o: 
    @echo Compiling ProcC source code into objects. 
    $(CXX) $(CXXFLAGS) $(INCDIR) -c $< -o [email protected] 

clean: 
    $(RM) $(OBJ) 

depend: $(SRCS) 
    makedepend $(INCDIR) $^ 

このメイクファイルは、ソースからのオブジェクトではなく、 実行可能ファイルを生成するようになっています。私は.soファイルをこのプロジェクトからライブラリとして作成しようとしています。このメイクファイルで間違っていることはありますか?

+0

'all'も' .PHONY'であり、 'depend'は不要です。 –

答えて

-1

共有ライブラリを構築する場合は、$ {MAIN}ルールを変更する必要があります。 現在、CXXを使用してすべてのSRCファイルをコンパイル(-c)します。しかし、ターゲットはすべてのOBJに依存しているため、すでにコンパイルされていました。したがって、このルールでは共有ライブラリをリンクするだけで済みます。 -c SRXではなく-sharedとOBJでCXXを呼び出す必要があります。

しかし私はあなたのビルドスクリプトを大幅に簡素化できるCMake 3.xのような現代的なビルドシステムを試してみることをお勧めします。

cmake_minimum_required(3.0) 
project(ProcC) 
set(CMAKE_CXX_STANDARD 11) 

add_library(ProcC SHARED ... Source files here...) 
target_include_directories(ProcC PUBLIC ... -I directories here...) 
target_link_libraries(ProcC PUBLIC ... libraries here...) 
0

このメイクファイルはsrc/branch/ならびにMakefileを含むトップレベルのプロジェクトディレクトリに.oファイルを生成します。

.cpp.o:ルールは.cppと同じディレクトリに.oを生成するためです。

このメイクファイルは実行可能

これらのルールソースからオブジェクトを生成することになっていないが、:

all: $(MAIN) 
$(MAIN): $(OBJ) 
    @echo Linking ProcC objects and dependencies into executable. 

$(OBJ)にオブジェクト・ファイルで構成される名前$(MAIN)と実行可能ファイルを構築します。実行可能ファイルをビルドしたくない場合は、ビルドしないでください。

関連する問題