使用DUB管理C依赖项

时间:2014-12-27 14:39:30

标签: d dub

我正在测试DUB,我想用

安装derelcitsdl2
"dependencies": {
   "derelict-sdl2": ">=1.2.10"
}

但是当我运行它时会立即抛出运行时错误。它告诉我它找不到* .so文件。

当我构建一个跨平台项目时,我不想依赖于这样的全局系统包,这很可能是Windows上的一个问题。

是否可以使用DUB运行buildscripts?

可能看起来像这样的东西

"dependencies": {
   "derelict-sdl2": ">=1.2.10"
}
"c-dependency-sdl":{
   git clone sdllink && cd sdl && cmake . && make && make install clib
 }

我没有在DUB网站上找到有关告诉我很可能不可能的信息。

如何为不同平台构建项目?

我需要为此编写.sh / .bat脚本吗?我如何指定本地搜索路径?

2 个答案:

答案 0 :(得分:5)

据我所知,dub不处理非dub依赖项的安装。您可以使用systemDependencies条目描述系统库要求,该条目将在注册表中显示,并且在链接器错误和#34;的情况下将显示,但它们不会自动安装。

您可以使用preGenerateCommandspreBuildCommands执行上述shell命令。我会将安装脚本放在上面描述的.sh / .bat脚本中(因此它们可用于非配音用户),然后在dub.json中放置这样的内容:

"preGenerateCommands-posix":   [ "./setup.sh"  ],
"preGenerateCommands-windows": [ "./setup.bat" ]

在Linux上,我通常会假设标准搜索路径上有必要的.so文件(或者可以通过软件包管理器安装),特别是对于像sdl这样常见的东西。

就指定搜索路径而言,我只使用lflags

"lflags": [ "-L./ext/sdl/lib" ] (or wherever the local libs are)

资料来源:DUB Package Format

完全披露:我实际上并没有尝试使用preGenerateCommands,但这听起来就像你需要的那样。

答案 1 :(得分:1)

对于它的价值,我转过来解决这个问题并使用make / gmake来驱动顶层构建。这将处理C / C ++依赖项(在我的情况下安装到/ usr / local / lib和/ usr / local / include)并使用Dub构建D语言部分(在dub.json中将依赖路径引用为lflags) )。