0

私はc ++で小さなツールを書いています。実際には、カスタマイズできるフレームワークに近いものです。以下のディレクトリ構成になっています(簡略化した例)。

src/  
   main/myexec          # linked to libapple.so
   apple/  
        coder/libapple.so  
        john/libapple.so  
          .  
          .  
        james/libapple.so  

ここで、ディレクトリ「coder」は一般的なダミーであり、libapple.so を生成するサンプル コードが含まれています。さまざまなユーザーがこのツールをチェックアウトし、独自のディレクトリを作成し、「coder」からテンプレート コードをコピーして、必要に応じてカスタマイズできます。configure オプション (ユーザーを示す) に応じて、それぞれの libapple.so を生成する必要があります。

前述したように、これは単純化された例です。一般的なプログラミング、継承などの問題ではありません。実際、「apple」フォルダーと同様に、「scripts」、「docs」、「configs」など、それぞれが同様のユーザー固有のフォルダーを持つ他のフォルダーがあります。また、ツールは単一のリポジトリの場所で維持されるため、ユーザー固有ではないすべてのコードをサポートおよび維持できます。ポリシーとして、ユーザーは自分のフォルダーの内容のみを変更してチェックインすることが期待されています。

私が直面している問題は「configure.ac」にあります。「AC_ARG_WITH」オプションは、新しいユーザーごとに configure.ac を編集する必要があるため、使用したくありません。また、各ユーザーの AC_CONFIG_FILE エントリは、フォルダ名を除いてまったく同じです。「--enable-user=User」を使用してから、AC_SUBST(USERDIR) を使用してみました。これは、Makefile.am で「SUBDIRS = @USERDIR@」を設定するのにも役立ちます。「AC_CONFIG_FILE = ([apple/${USERDIR}/Makefile])」を指定すると、「Makefile.in」がユーザー フォルダーの下に作成されないという事実を除いて、すべて問題ないようです。

この問題を克服する方法をアドバイスしてください。最悪の場合、ソフトリンクを作成することになるかもしれません:(

4

1 に答える 1

0

丸一日頭を悩ませた後、私が思いついた解決策は次のとおりです。

このようなファイル「project_makefiles.m4.in」を作成します

AC_CONFIG_FILES([ apple/USERDIR/Makefile ]

以下を configure.ac に追加します。

m4_include([project_makefiles.m4])

"USERDIR" を置き換えて "project_makefiles.m4.in" から "project_makefiles.m4" を作成する "build.sh" のようなラッパー スクリプトを作成します。これは automake の前に行われます。

于 2013-10-26T04:51:58.073 に答える