我需要生成两个具有一些常见源代码的exe文件。用dub做这件事的最佳方法是什么?
这是我的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"]
}]
}
答案 0 :(得分:6)
您的dub.json
会有效,但您需要明确告诉它构建其中一个
包含dub build :App1
或dub build :App2
的子包(其中:App1
为a
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
,因此dub看不到重复的main
。
The docs建议反对 为此目的使用子包:
也可以在根包文件中定义子包,但请注意,通常不鼓励将多个子包的源代码放在同一个源文件夹中。这样做会导致对“依赖项”部分中未明确声明的子包的隐藏依赖性。这些隐藏的依赖项可能会导致构建错误以及某些可能难以理解的构建模式或依赖树。
我意识到你正在使用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"
}