Я пытаюсь настроить проект C ++, который сам использует другой (не Gradle) проект C ++.
Поскольку компиляция не требует ничего особенного, я попытался включить проект в качестве подмодуля и скомпилировать эту библиотеку в виде библиотеки через сам Gradle.
Насколько мне известно, я правильно настроил скрипт сборки следующим образом:
// Project-Type
apply plugin: "cpp"// IDEs
apply plugin: "visual-studio"
model {
visualStudio {
solutions.all {
solutionFile.location = "vs/${name}.sln"solutionFile.withContent { TextProvider content ->
content.asBuilder().insert(0, "# GENERATED FILE: DO NOT EDIT\n")
content.text = content.text.replaceAll("HideSolutionNode = FALSE", "HideSolutionNode = TRUE")
}
}
}
repositories {
libs(PrebuiltLibraries) {
easyloggingpp {
headers.srcDir "lib/easyloggingpp/src"}
eigen {
headers.srcDir "lib/OpenNN/eigen/src"}
}
}
platforms {
x86 {
architecture "x86"}
x64 {
architecture "x64"}
}
buildTypes {
debug
release
}
components {
tinyxml2(NativeLibrarySpec) {
sources.cpp {
source {
srcDirs "lib/OpenNN"include "tinyxml2/**/*.cpp"}
exportedHeaders {
srcDirs "lib/OpenNN"include "tinyxml2/**/*.h"}
}
}
openNN(NativeLibrarySpec) {
sources.cpp {
source {
srcDirs "lib/OpenNN"include "opennn/**/*.cpp"}
exportedHeaders {
srcDirs "lib/OpenNN"include "opennn/**/*.h"}
lib library: "eigen", linkage: "api"lib library: "tinyxml2", linkage: "static"}
}
anni(NativeExecutableSpec) {
if(System.properties['sun.arch.data.model'] == "64") {
targetPlatform "x64"} else {
targetPlatform "x86"}
sources.cpp {
source {
srcDirs "src"include "**/*.cpp"}
exportedHeaders {
srcDirs "src"include "**/*.hpp"}
lib library: "easyloggingpp", linkage: "api"lib library: "openNN", linkage: "static"}
}
}
binaries {
withType(NativeExecutableBinarySpec) {
if (toolChain in Gcc) {
cppCompiler.args "-Wall", "-Wextra", "-Wpedantic", "-fPIC"}
if (toolChain in Clang) {
cppCompiler.args "-Weverything", "-pedantic"}
if (toolChain in VisualCpp) {
cppCompiler.args "/W4", "/FS", "/EHsc"}
}
withType(SharedLibraryBinary) {
buildable = false
}
withType(StaticLibraryBinarySpec) {
if (toolChain in Gcc) {
cppCompiler.args "-Werror"}
if (toolChain in Clang) {
cppCompiler.args "-Werror"}
if (toolChain in VisualCpp) {
cppCompiler.args "/W0", "/EHsc"}
}
all {
if(buildType == buildTypes.debug) {
cppCompiler.define "__DEBUG__"
if (toolChain in Gcc) {
cppCompiler.args "-Og", "-g3"}
if (toolChain in Clang) {
cppCompiler.args "-O0", "-g"}
if (toolChain in VisualCpp) {
cppCompiler.args "/Od", "/Z7"}
}
if(buildType == buildTypes.release) {
cppCompiler.define "__NDEBUG__"
if (toolChain in Gcc) {
cppCompiler.args "-Ofast", "-g0"}
if (toolChain in Clang) {
cppCompiler.args "-Ofast", "-g0"}
if (toolChain in VisualCpp) {
cppCompiler.args "/O2"}
}
}
}
}
Хотя, когда я бегу gradle build
Я получаю следующую ошибку:
Parallel execution is an incubating feature.
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':linkAnniReleaseExecutable'.
> No static library binary available for library 'openNN' with [flavor: 'default', platform: 'x64', buildType: 'release']
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
Может кто-нибудь помочь мне с тем, что я делаю неправильно?
(Репо можно найти Вот и версия времени размещения этого вопроса: e518d77c4d)
Задача ещё не решена.
Других решений пока нет …