GNU Make 3.82
gcc 4.7.2
c89
にオブジェクトファイルを作成することができますガイド:は、私は、ファイルを作成し、次のしている特定のディレクトリ
INC_PATH=-I/home/dev_tools/apr/include/apr-1
LIB_PATH=-L/home/dev_tools/apr/lib
LIBS=-lapr-1 -laprutil-1
RUNTIME_PATH=-Wl,-rpath,/home/dev_tools/apr/lib
CC=gcc
CFLAGS=-Wall -Wextra -g -m32 -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -D_LARGEFILE64_SOURCE $(INC_PATH)
SOURCES=$(wildcard src/*.c)
OBJECTS=$(patsubst %.c, %.o, $(SOURCES))
EXECUTABLE=bin/to
all: build $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) -o [email protected] $(RUNTIME_PATH) $(OBJECTS) $(LIB_PATH) $(LIBS)
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -c $(SOURCES) $(LIB_PATH) $(LIBS)
build:
@mkdir -p bin
clean:
rm -rf $(EXECUTABLE) $(OBJECTS) bin
find . -name "*~" -exec rm {} \;
find . -name "*.o" -exec rm {} \;
私のディレクトリ構造はこのproject/src project/bin
ようなものです。私のMakefileはproject (root)
フォルダにあり、すべての* .hと* .cはsrcディレクトリにあります。
SOURCES=$(wildcard src/*.c)
オブジェクトファイル:私はすべてのソースファイルを取得するために、これを使用している
gcc: error: src/timeout.o: No such file or directory
:現在、私は
が、私はこのエラーを取得する唯一のソース・ファイルと呼ばれるtimeout.cがあります。
OBJECTS=$(patsubst %.c, %.o, $(SOURCES))
ただし、makeはプロジェクトのルートフォルダにオブジェクトファイルを作成しているようですefileはです。それをsrcディレクトリに入れてはいけませんか?
共有ライブラリの作成はどうですか?私は共有ライブラリを作成するために '-c'スイッチが必要だと主張しているサイトを横断しましたが、これを使うと' -o'を使用できなくなりました。そして、現在、makeはルートプロジェクトディレクトリのオブジェクトファイルを作成しています。私のフォルダ構造は 'src/lib/*'です。objファイルを 'obj/lib/* 'に生成します。gccコマンドは' g ++ -std = C++ 11 -g -I./include -fPIC -Wall -c ./src/lib/Source1.cpp。/ src/lib/Source2.cpp' – krb686
さて、私はそれを得ました。複数のソースに依存する複数のオブジェクトをコンパイルしようとしていました。私は静的パターンルールと自動変数 '$ <'と '$ @ 'で置き換えて、魅力的に動作します。 gccがなぜ文句を言うのか分かりませんし、 '-o'で' -c'を使うことはできないと言いますが、確かに可能です。 – krb686