DUB: создать два исполняемых файла с общей базой кода

Мне нужно создать два EXE-файла, которые имеют некоторые общие исходные коды. Каков наилучший способ сделать это с даб?

Я пытался сделать как этот, но получил сообщение об ошибке только об одной основной функции.

Вот мой 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"]
    }]
} 

1 ответ

Решение

Ваш dub.json будет работать, но вам нужно явно указать это для сборки одного из подпакетов с dub build :App1 или же dub build :App2 (где :App1 это ярлык для code1: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,

Обратите внимание, что вам нужно excludedSourceFiles поэтому даб не видит дубликат 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"
}
Другие вопросы по тегам