在 bazel build 中使用宏
Using macros with bazel build
我正在使用宏在我的代码中启用日志记录。另外,我正在使用 bazel 构建。
目前我需要更改我的 .cpp 文件以包含 #define
以启用此宏。有什么方法可以让我连同 bazel build
命令一起提供吗?
一种选择是直接用 --cxxopt
flag 控制 #define
。
例如考虑这段代码:
#include <iostream>
#ifndef _MY_MESSAGE_
#define _MY_MESSAGE_ "hello"
#endif
int main(int argc, char const *argv[]) {
std::cerr << "message: " _MY_MESSAGE_ "\n";
#ifdef _MY_IDENTIFIER_
std::cerr << "if branch \n";
#else
std::cerr << "else branch \n";
#endif
return 0;
}
没有标志的建筑应该会产生以下结果:
> bazel build :main
...
> ./bazel-bin/main
message: hello
else branch
同时通过设置标志:
> bazel build --cxxopt=-D_MY_IDENTIFIER_ --cxxopt=-D_MY_MESSAGE_="\"hi\"" :main
> ./bazel-bin/main
message: hi
if branch
同样适用于bazel run
:
> bazel run --cxxopt=-D_MY_IDENTIFIER_ --cxxopt=-D_MY_MESSAGE_="\"hi\"" :main
...
message: hi
if branch
(仅在 linux 上测试)
我正在使用宏在我的代码中启用日志记录。另外,我正在使用 bazel 构建。
目前我需要更改我的 .cpp 文件以包含 #define
以启用此宏。有什么方法可以让我连同 bazel build
命令一起提供吗?
一种选择是直接用 --cxxopt
flag 控制 #define
。
例如考虑这段代码:
#include <iostream>
#ifndef _MY_MESSAGE_
#define _MY_MESSAGE_ "hello"
#endif
int main(int argc, char const *argv[]) {
std::cerr << "message: " _MY_MESSAGE_ "\n";
#ifdef _MY_IDENTIFIER_
std::cerr << "if branch \n";
#else
std::cerr << "else branch \n";
#endif
return 0;
}
没有标志的建筑应该会产生以下结果:
> bazel build :main
...
> ./bazel-bin/main
message: hello
else branch
同时通过设置标志:
> bazel build --cxxopt=-D_MY_IDENTIFIER_ --cxxopt=-D_MY_MESSAGE_="\"hi\"" :main
> ./bazel-bin/main
message: hi
if branch
同样适用于bazel run
:
> bazel run --cxxopt=-D_MY_IDENTIFIER_ --cxxopt=-D_MY_MESSAGE_="\"hi\"" :main
...
message: hi
if branch
(仅在 linux 上测试)