1

コードが現在持っているフラットな構造の代わりに、サブフォルダーに含まれるモジュールに整理したいと考えています (モジュールが十分に大きくなった場合は、おそらくサブサブフォルダーも)。

各モジュールには、それぞれ .o ファイルを生成する 1 つ以上の翻訳単位があります。最終的な目標は、これらすべてのオブジェクト ファイルを静的ライブラリにマッシュアップすることです (今のところ)。

私は単純な「make」を使用していますが、それはすでに十分に複雑です。
指定されたモデルが自然に得られるシステム、または makefile を手動で記述するよりもはるかに労力がかからないシステムはありますか? (あなたがcmakeを推薦するつもりなら、私はすでに試して良い解決策を思いつくことができなかったので、いくつかのヒントが必要です。)

4

2 に答える 2

2

古き良き時代の GNU make で役立つかもしれない、私の現在のプロジェクトの makefile からのいくつかの言い換え:

SOURCEDIR := dir1 dir2/subdir1 dir3 dir4 dir5/subdir1 dir6/subdir1
SOURCES := $(foreach srcdir,$(SOURCEDIR),$(wildcard $(srcdir)/*.c))
OBJECTS := $(patsubst %.c,build/%.o,$(SOURCES))
OBJDIRS := $(addprefix build/,$(SOURCEDIR))
MAKEDEPS := $(patsubst %.c,build/%.d,$(SOURCES))

all: example

$(OBJDIRS):
    -mkdir -p $@

build: $(OBJDIRS)

build/%.o : %.c | build
    cc -MMD -c -o $@ $<

example: $(OBJECTS)
    cc -o $@ $(OBJECTS)

-include $(MAKEDEPS)

build本質的には、指定されたディレクトリにあるすべてのソース ファイルを、ソース ディレクトリ レイアウトに対応する階層内のディレクトリのサブディレクトリにあるオブジェクト ファイルに構築し(複数のソース ファイルが同じ名前を持つ場合に重要)、結果を次の場所にリンクします。実行可能ファイルexample

MAKEDEPSおまけとして、変数と clang の-MMDフラグによる動的な依存関係の生成と包含。

于 2013-06-18T22:21:55.020 に答える
0

目的によって異なります。一般に、ビルド パッケージはパフォーマーではなく聴衆を対象としています。多くの場合、人々が展開するさまざまな環境が考慮されます。私は「tup」をいじってみました。これは、編集後にできるだけ早く実行可能ファイルを生成する方法のように思えました。'Premake' は複数のプラットフォームで動作するようですが、コンパイラ オプションの指定は Cmake よりも賢明ではないことがわかりました。

良い Makefile チューターを見つけたようですので、私の所見はそのままにしておきます。

于 2013-06-19T18:07:21.410 に答える