0

SWIG を使用して PHP 拡張ライブラリを作成するために Makefile を手動で作成しています。次のディレクトリ構造があります。

wrappers/   # SWIG generated C++ wrappers and header
objects/    # I want to place my object files here
bin/        # I want to place my executable (shared lib) here

これは私のMakefileがどのように見えるかです:

CC=g++
CFLAGS=-fPIC -c -Wall
INCLUDES=`php-config --includes` -Iwrappers
LDFLAGS=-shared
SOURCES=foo_wrap.cpp \
        foobar_wrap.cpp  \
        foofoobar_wrap.cpp   \
        foobarbar_wrap.cpp

OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=php_foobarlib.so

all: wrappers/$(SOURCES) bin/$(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
        $(CC) $(LDFLAGS) $(OBJECTS) -o objects/$(input)

.cpp.o:
        $(CC) $(CFLAGS) $< -o objects/$(input)

clean:
    rm -rf *o $(EXECUTABLE)

コマンド ラインで make を実行すると、次のエラーが表示されます。

make: *ターゲットをすべてにするルールはありませんfoobar_wrap.cpp', needed by。止まる。

代わりに CMake を使用して共有ライブラリを構築したいと考えています。プロジェクトのディレクトリ構造を考慮して、共有ライブラリをビルドするために作成する必要がある CMakeLists ファイルの概要を投稿してください。

4

2 に答える 2

0

Makefile以下で指定できます。

SOURCES=wrappers/foo_wrap.cpp wrappers/fo. .... and so on,

その後、から削除wrappers/しますall:

あなたが観察したように、これはwrappersディレクトリにオブジェクトファイルを作成します。これを回避するには、gcc / g ++オプションを調べて、すべてのオブジェクトファイルを別々のディレクトリに配置し、この問題を解決します。

于 2012-08-27T11:54:03.277 に答える
0

wrappers/$(SOURCES)ナンセンスに展開され、最初のファイル名のみにパスのプレフィックスが付けられます。

于 2012-08-27T11:14:25.200 に答える