簡體   English   中英

如何在 Android/NDK 上將命令行參數從 gradlew.bat 傳遞到 Clang

[英]How to pass command line arguments from gradlew.bat to Clang on Android/NDK

我正在使用一個 jenkins 腳本,它像這樣調用 gradle:

./gradlew --info assembleRelease

我們的很多構建設置都存在於 gradle 文件中,這大部分都很好,因為通常我們知道我們想要通過它的發布或調試性質為特定類型的構建指定的所有內容。

然而,我們有一個例外,這是一個我們想要在 Jenkins 中通過切換來控制的標志。 此標志將打開或關閉 C++ 宏定義“TEST_MACRO”。

在不創建新構建類型的情況下,我希望只傳入 -DTEST_MACRO 標志或類似標志。 我可以用 gradlew 做到這一點嗎?

./gradlew --info assembleRelease -DTEST_MACRO=1

它會作為全局定義的 C++ 預處理器定義進入我們的 clang 編譯器嗎? 有沒有辦法在不需要構建更多變體的情況下做到這一點? (例如,我們的實際構建系統有“googleRelease”、“googleDebug”、“googleStage”、“amazonRelease”、“amazonDebug”、“amazonStage”,我想避免只需要一個額外的現有配置的 2x 變體cpp 定義我們要打開和關閉。)

一種可能性是使用其值配置為更改編譯器選項項目屬性 在下面,您可以找到一個自包含的示例構建(使用 Gradle 6.0.1 測試)。

如果你跑

./gradlew build -PTEST_MACRO=Foo
build/exe/main/debug/*

那么這將打印“Hello, Foo!”。

如果你跑

./gradlew build
build/exe/main/debug/*

那么這將打印“你好,世界!”。

自包含示例構建

build.gradle

plugins {
    id 'cpp-application'
}

tasks.withType(CppCompile).configureEach {
    if (project.hasProperty('TEST_MACRO')) {
        macros.put('TEST_MACRO', project.TEST_MACRO)
    }
}

src/main/cpp/hello.cpp

#include <iostream>
#define XSTR(x) STR(x)
#define STR(x) #x
int main()
{
#ifdef TEST_MACRO
    std::cout << "Hello, " << XSTR(TEST_MACRO) << "!\n";
#else
    std::cout << "Hello, World!\n";
#endif
    return 0;
}

賞金接受的答案讓我大部分時間都在那里,但是通過管道 gradle -P 提供的參數的方法對我來說有點不同。 我無法讓 macros.put 正常運行,也許我把它放在了錯誤的地方。

對於無法使用 macros.put 的任何人,我的建議是執行以下操作:

./gradlew build -PTARGET_SERVER=DEV

然后在您的 build.gradle 文件中,這是相關部分的不完整片段(需要您的 minSdkVersion 和所有其他相關項目設置內容),它將 cFlags 傳遞給已編譯的 apk:

apply plugin: 'com.android.application'

android {
    defaultConfig {
        externalNativeBuild.ndkBuild {
            if (project.hasProperty('TARGET_SERVER')) {
                cFlags += '-DTARGET_SERVER=' + project.TARGET_SERVER
            }
            arguments '-j' + Runtime.runtime.availableProcessors(), 'NDK_TOOLCHAIN_VERSION=clang'
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM