3

共通のソース コードを含む 2 つの exe ファイルを生成する必要があります。ダブでそれを行う最良の方法は何ですか?

のようにしようとしましこれたが、許可されているメイン関数は 1 つだけであるというエラー メッセージが表示されました。

これが私の dub.json です:

{
    "name": "code1",
    "authors": [ "Suliman" ],
    "description": "A minimal D application.",
    "copyright": "Copyright © 2016, Suliman",
    "license": "proprietary",
    "subPackages": [
    {
        "name": "App1",
        "targetName": "App1",
        "description": "App1",
        "targetType": "executable",
        "excludedSourceFiles" : ["source/App2/*"],
        "excludedSourceFiles" : ["source/app2.d"]
    },

    {
        "name": "App2",
        "targetName": "App2",
        "description": "App2",
        "targetType": "executable",
        "excludedSourceFiles" : ["source/App1/*"],
        "excludedSourceFiles" : ["source/app1.d"]
    }]
} 
4

1 に答える 1

7

動作しますが、サブパッケージの 1 つをordub.jsonでビルドするように明示的に指示する必要があります(は のショートカットです)。dub build :App1dub build :App2:App1code1:App1

ここでは、個別の構成がより適切な場合があります。

"configurations": [
    {
        "name": "App1",
        "targetType": "executable",
        "mainSourceFile": "source/app1.d",
        "excludedSourceFiles": [ "source/app2.d", "source/App2/*" ],
        "targetName": "app1"
    },
    {
        "name": "App2",
        "targetType": "executable",
        "mainSourceFile": "source/app2.d",
        "excludedSourceFiles": [ "source/app1.d", "source/App1/*" ],
        "targetName": "app2"
    }
]

dub build --config=App1生産app1します、 dub build --config=App2生産しますapp2

プレーンdub buildはデフォルトでApp1.

excludedSourceFilesdub が重複を認識しないようにする必要があることに注意してくださいmain

ドキュメントでは、この目的でサブパッケージを使用しないことを推奨しています。

ルート パッケージ ファイル内でサブ パッケージを定義することもできますが、通常、複数のサブ パッケージのソース コードを同じソース フォルダーに配置することはお勧めできません。そうすることで、「依存関係」セクションで明示的に述べられていないサブパッケージへの隠れた依存関係につながる可能性があります。これらの隠れた依存関係は、理解しにくい特定のビルド モードまたは依存関係ツリーと組み合わせてビルド エラーを引き起こす可能性があります。

を使用していることに気付いたdub.jsonので、json 形式を上に置きました。参考までに、dub.sdl以前に投稿したフォーマットを以下に示します。

configuration "App1" {
    targetType "executable"
    mainSourceFile "source/app1.d"
    excludedSourceFiles "source/app2.d" "source/App2/*"
    targetName "app1"
}

configuration "App2" {
    targetType "executable"
    mainSourceFile "source/app2.d"
    excludedSourceFiles "source/app1.d" "source/App1/*"
    targetName "app2"
}
于 2016-02-27T17:24:38.687 に答える