我正在开发一个通过step1:
ghc ${SRCDIR}/Internal/InlineC.hs -isrc/
step2:
cc -c ${SRCDIR}/Internal/InlineC.c -o ${LIBDIR}/InlineC_c.o -I${PETSC_DIR_ARCH}/include -I${PETSC_DIR}/include
step3:
ghci ${SRCDIR}/Test.hs ${SRCDIR}/Internal/InlineC.hs ${LIBDIR}/InlineC_c.o ${LIBDIR}/Internal.o -isrc/ -L${PETSC_DIR_ARCH}/lib -lpetsc -lmpich
使用一些C绑定的库。截至目前,构建过程涉及一个makefile,如下所示,因为我们首先需要从inline-c宏生成C存根,将它们编译成目标代码并动态链接它们,在本例中为GHCi。
stack build
有没有办法在public static bool StartServices()
{
try
{
bool startedWithSuccess = false;
foreach (var servico in GetInstances())
{
using (servico)
{
if (servico.Status != ServiceControllerStatus.Running
&& servico.Status != ServiceControllerStatus.StartPending)
{
servico.Start();
startedWithSuccess = TimeoutHelper.RetryUntilSuccessOrTimeout(() =>
{
servico.Refresh();
return servico.Status != ServiceControllerStatus.Running ? false : true;
}, TIMEOUT_IN_MILLISECONS);
}
else
{
startedWithSuccess = true;
}
}
}
return startedWithSuccess;
}
catch (Exception)
{
throw new SqlServerStartServiceException();
}
}
public static ServiceController[] GetInstances()
{
ServiceController[] services = ServiceController.GetServices().Where(x => x.ServiceName.Contains("SQL")).ToArray();
var lista = services.Where(x => x.DisplayName.Contains("Agent") ||
x.DisplayName.Contains("Browser") ||
x.DisplayName.Contains("VSS") ||
x.DisplayName.Contains("Active")).ToArray();
return services.Except(lista).ToArray();
}
食谱中打包上面的构建序列?
提前谢谢
答案 0 :(得分:0)
是的,有。仔细阅读堆栈指南并遵循正确的.cabal文件语法。
更确切地说,当处于类似情况(HaskellC - > C - > Haskell)时,请确保.cabal文件具有:
通过在include-dirs
节中指定extra-lib-dirs
,extra-libraries
和library
字段来绑定范围内的库。
c-sources
字段,指向与包含inline-c
内容的Haskell文件的相同名称的文件(即所有[C.exp| |]
用于包装C函数的quasiquoters)但具有.c
扩展名。
这将触发警告,因为C文件在构建开始时尚不存在,但它也会调用gcc,它将处理由inline-c
生成的C输出。