Добавить пользовательский исходный каталог?

Я новичок в 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"
        }
    }
}

Другие вопросы по тегам