Как включить библиотеки только с внешними заголовками в собственные сборки Gradle с помощью нового нативного eplugin (5.3.1) gradle? - PullRequest
1 голос
/ 02 апреля 2019

Оценка родного языка gradle. Я хочу включить lib только для заголовка, {fmt}, который будет использоваться в мультипроекте родного языка gradle с новым плагином gradle native .

Я пробовалв том числе через 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();
}

Приведенный выше пример приводит к ошибке компиляции, которая очевидна из-за неразрешимых зависимостей.

1 Ответ

0 голосов
/ 06 апреля 2019

Сам нашел решение. К сожалению, 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))
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...