评估gradle本机我想只包含一个标头库{fmt},用在new gradle native plugin的gradle本机多项目中。
我尝试通过flatDir和Maven存储库包括它。该文档仅提及有害依赖。但是即使那样,外部代码似乎也必须使用build.gradle文件进行扩展。在下面您可以看到我的最后尝试
build.gradle根目录
allprojects {
apply plugin: 'xcode'
apply plugin: 'visual-studio'
configurations {
fmtLib
}
dependencies {
fmtLib files(file("$rootDir/../fmt"))
}
}
库中的build.gradle应该使用{fmt}
plugins {
id 'cpp-library'
}
library {
linkage = [Linkage.SHARED]
targetMachines = [
machines.windows.x86_64,
machines.macOS.x86_64,
machines.linux.x86_64
]
baseName = "greeter"
}
greeter.cpp应使用{fmt}
#define FMT_HEADER_ONLY
#include <iostream>
#include "../public/greeter.hpp"
#include "include/fmt/format.h"
void Greeter::greet() {
fmt::print("Hello, {}!", "world");
std::cout << "Hello, " << name << ", your name has " << getNameLength() << " chars." << std::endl;
}
int Greeter::getNameLength() {
return name.length();
}
上面的示例导致一个编译错误,因为无法解决的依赖关系很明显。
答案 0 :(得分:0)
我自己找到了解决方案。不幸的是gradle直到5.3.1才提供更好的解决方案,但是可以通过以下方法解决此问题
def fmtHeaders = file("$rootDir/../fmt/include")
components.main.binaries.whenElementFinalized { binary ->
project.dependencies {
if (binary.optimized) {
add(binary.includePathConfiguration.name, files(fmtHeaders))
} else {
add(binary.includePathConfiguration.name, files(fmtHeaders))
}
}
}