我正在使用像这样调用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定义我们要打开和关闭。)
如果您运行
./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; }