2

メイクファイルの投影についてあなたの助けが必要です。だから、私が持っているものと私が手に入れたいもの。2 つの実行可能ファイルをビルドする必要があります。ソースコードは共通です。プリプロセッサ マクロは、main.cpp などで、両方の exe の違いを制御します。

#if PROJECT_TYPE==FTP
std::cout << "FTP" << std::endl;
#else
std::cout << "SFTP" << std::endl;
#endif

違いはソース コードだけでなく、リンクに使用される追加のライブラリにもあります。

FTP_LDFLAGS= -static-libstdc++ -static-libgcc -s -L $(ROOT_DIR)/lib/Release -l:libboost_thread-mgw46-mt-1_49.a -l:libcommon.a \
-l:libfile.a -l:libfilesearcher.a -l:libftpclient.a -l:libftplib.a -l:libdbclient.a -l:libsqlite3.a -l:libscheduler.a -l:libws2_32.a
SFTP_LDFLAGS= -static-libstdc++ -static-libgcc -s -L $(ROOT_DIR)/lib/Release -l:libboost_thread-mgw46-mt-1_49.a -l:libcommon.a \
-l:libfile.a -l:libfilesearcher.a -l:libdbclient.a -l:libsqlite3.a -l:libscheduler.a -l:libsftpclient.a -l:libws2_32.a -l:libssh.dll

また、独自の CXXFLAGS と出力ディレクトリを使用してデバッグ/リリース ビルド ターゲットを作成したいので、結果として次のようになります。

TARGETS= ftp_auto_backup sftp_auto_backup

ここのdirsツリーのスクリーンショット。

次のように、コンパイルに暗黙のルールを使用したい:

%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $(O_DIR)/$@

しかし、各ターゲット int $(TARGETS) および各ビルド構成に対して個別の O_DIR を指定するにはどうすればよいでしょうか? 私の主な問題は、このステップにあります。現時点で持っているすべてのメイクファイルを貼り付けることができますが、それでも何もビルドされません。念のため、ここにあります:http://pastebin.com/jjB5Ld1s

よろしくお願いします!

4

1 に答える 1

2

これを行うには多くの方法があります。最も単純なのは、再帰的なMakeによるもののようです。(私は、これが常に悪い考えだと思っている人の中にはいません。)

.PHONY: release
release: VERSION=Release

.PHONY: debug
debug: VERSION=Debug

release debug:
        @$(MAKE) -S ftp_auto_backup sftp_auto_backup VERSION=$(VERSION)

次に、を指定して実行可能ファイルを作成しますVERSION。2つのプロジェクトタイプは別の再帰レイヤーで処理できますが、それなしでも処理できます(プリプロセッサマクロとコンパイラ/リンカーフラグについては、すでに知っているようですので、詳しくは説明しません。必要に応じてそれらを綴ります):

OBJ_LIST = foo.o bar.o baz.o

ftp_auto_backup: PROJECT_TYPE=FTP
ftp_auto_backup: $(addprefix $(VERSION)/ftp_auto_backup/obj/, $(OBJ_LIST))

sftp_auto_backup: PROJECT_TYPE=SFTP
sftp_auto_backup: $(addprefix $(VERSION)/sftp_auto_backup/obj/, $(OBJ_LIST))

ftp_auto_backup sftp_auto_backup:
        @g++ -Wall $^ -o $@ with various flags

$(VERSION)/ftp_auto_backup/obj/%.o: %.cc
        @g++ -Wall -c $< -o $@ with various flags

$(VERSION)/sftp_auto_backup/obj/%.o: %.cc
        @g++ -Wall -c $< -o $@ with various flags
于 2012-04-20T05:25:40.430 に答える