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"
}