C++ 如何使用gradle'将外部标题库包含到gradle本机版本中;s(5.3.1)新国家爱普金?
评估gradle native我想包括一个只包含头的库{fmt},用于带有的gradle native多项目 我尝试通过flatDir和maven存储库将其包括在内。文档只提到了基本依赖项。但即便如此,外来代码似乎也必须使用build.gradle文件进行扩展。下面是我最后一次尝试 根目录下的build.gradleC++ 如何使用gradle'将外部标题库包含到gradle本机版本中;s(5.3.1)新国家爱普金?,c++,gradle,gradle-native,C++,Gradle,Gradle Native,评估gradle native我想包括一个只包含头的库{fmt},用于带有的gradle native多项目 我尝试通过flatDir和maven存储库将其包括在内。文档只提到了基本依赖项。但即便如此,外来代码似乎也必须使用build.gradle文件进行扩展。下面是我最后一次尝试 根目录下的build.gradle allprojects { apply plugin: 'xcode' apply plugin: 'visual-studio' configurati
allprojects {
apply plugin: 'xcode'
apply plugin: 'visual-studio'
configurations {
fmtLib
}
dependencies {
fmtLib files(file("$rootDir/../fmt"))
}
}
在库中使用{fmt}的build.gradle
plugins {
id 'cpp-library'
}
library {
linkage = [Linkage.SHARED]
targetMachines = [
machines.windows.x86_64,
machines.macOS.x86_64,
machines.linux.x86_64
]
baseName = "greeter"
}
#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();
}
greeter.cpp应使用{fmt}
plugins {
id 'cpp-library'
}
library {
linkage = [Linkage.SHARED]
targetMachines = [
machines.windows.x86_64,
machines.macOS.x86_64,
machines.linux.x86_64
]
baseName = "greeter"
}
#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();
}
#仅定义FMT#U头
#包括
#包括“./public/greeter.hpp”
#包括“include/fmt/format.h”
无效问候者::问候(){
打印(“你好,{}!”,“世界”);
std::cout我自己已经找到了解决方案。不幸的是,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))
}
}
}
我自己已经找到了解决方案。不幸的是,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))
}
}
}