如何将命令行参数从gradlew.bat传递到Android / NDK上的Clang

问题描述 投票:1回答:1

我正在使用像这样调用gradle的jenkins脚本:

./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”,我想避免只为一次额外的配置就拥有2倍现有配置的变化cpp定义我们要打开和关闭。)

android c++ gradle android-ndk preprocessor
1个回答
0
投票
一种可能性是使用其值配置为project propertychange the compiler options。在下面,您可以找到一个独立的示例构建(已通过Gradle 6.0.1测试)。

如果您运行

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

然后将显示“ Hello,Foo!”。

如果您运行

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

然后将打印“ Hello,World!”。

自包含示例构建

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; }

© www.soinside.com 2019 - 2024. All rights reserved.