Добавить пользовательский исходный каталог?
Я новичок в Gradle и пытаюсь создать кросс-платформенный скрипт сборки. Я хочу использовать пользовательский каталог с исходным кодом. Не src/{ProjectName}/cpp или header/{ProjectName}/cpp. Мои исходные файлы находятся в папках с именами "src" и "include" на том же уровне, что и файл build.gradle.
Пожалуйста, смотрите изображение структуры моего проекта
Как мне связать только эти исходные папки? Пример библиотеки gradle cpp не охватывает это. Скрипт, который я сделал, успешно компилируется, но не создает exe. Я думаю, потому что он не может найти файлы cpp.
А еще лучше, как я могу увидеть пути, используемые gradle? Опции -"-info" и "–debug" не выводят используемые исходные пути.
Ниже мой полный сценарий...
apply plugin: 'cpp'
model {
buildTypes {
debug
release
}
platforms {
//osx_64 {
//architecture "x86_64"
//operatingSystem "osx"
//}
windows_x86 {
architecture "x86"
operatingSystem "windows"
}
windows_64 {
architecture "x86_64"
operatingSystem "windows"
}
}
repositories {
libs(PrebuiltLibraries) {
libcinder {
headers.srcDir "/../cinder/include/"
binaries.withType(StaticLibraryBinary) {
if (targetPlatform.operatingSystem.windows) {
if (targetPlatform == platforms.windows_x86) {
if(buildType == buildTypes.debug) {
staticLibraryFile = file("/../cinder/lib/msw/x86/Debug/v140/cinder.lib")
} else if(buildType == buildTypes.release) {
staticLibraryFile = file("/../cinder/lib/msw/x86/Release/v140/cinder.lib")
}
} else if(targetPlatform == platforms.windows_64) {
if(buildType == buildTypes.debug) {
staticLibraryFile = file("/../cinder/lib/msw/x64/Debug/v140/cinder.lib")
} else if(buildType == buildTypes.release) {
staticLibraryFile = file("/../cinder/lib/msw/x64/Release/v140/cinder.lib")
}
}
} //else if(targetPlatform.operatingSystem.o osx) {
//if (targetPlatform == platforms.osx_64) {
//if(buildType == buildTypes.debug) {
//staticLibraryFile = file("/../cinder/lib/macosx/Debug/libcinder.a")
//} else if(buildType == buildTypes.release) {
//staticLibraryFile = file("/../cinder/lib/macosx/Release/libcinder.a")
//}
//}
//}
}
}
}
}
components {
main(NativeExecutableSpec) {
sources {
cpp {
source {
srcDir "src"
include "include"
cpp.lib library: "libcinder", linkage: "static"
}
}
}
}
}
/*
components {
main(NativeExecutableSpec) {
sources {
cpp.lib library: "libcinder", linkage: "static"
}
}
}
*/
}
1 ответ
Вы можете использовать sourceSets для настройки ваших источников, например.
apply plugin: 'java'
sourceSets {
main {
java {
srcDirs = [
"$projectDir/src/main/java",
"$projectDir/$generatedDir",
"$projectDir/config/sql"
]
include '**/*.java'
}
resources {
srcDirs = [
"$projectDir/src/main/resources"
]
}
}
test {
java { srcDir 'src/test/java'}
resources { srcDir 'src/test/resources' }
}
componentTest {
java { srcDir 'src/ctest/java' }
resources { srcDir 'src/ctest/resources' }
}
}
То, как это делается в проекте Gradle C++, отличается от того, как это делается в проекте Java.
С cpp-application
/cpp-library
Эти плагины были представлены в 2018 году и являются предпочтительными методами построения проектов C++ в будущем (см. Полную документацию).
Из документации по " Настройка расположения файлов и каталогов":
plugins {
id 'cpp-application'
}
application {
source.from file('src')
privateHeaders.from file('src')
publicHeaders.from file('include')
}
plugins {
id 'cpp-library'
}
library {
source.from file('src')
privateHeaders.from file('src')
publicHeaders.from file('include')
}
Обратите внимание, что, объявив их, Gradle будет искать только в этих каталогах (а не в местоположении по умолчанию для src/main/cpp
).
С cpp
плагин (не рекомендуется)
В cpp
плагин, использующий программную модель, является более старым, устаревшим методом создания проектов C++ (см. документацию).
apply plugin: "cpp"
sources {
cpp {
source {
srcDir "src"
// Note that this reference to "include" refers to the files that should be matched in this directory and has nothing to do with the include directory
include "**/*.cpp"
}
exportedHeaders {
srcDir "include"
}
}
}