可以在目标命令之前添加 time 命令,从而计算目标命令的执行时间。使用 make 命令的 -j 选项,可以启用多线程编译。make -j4 表示创建 4 个线程并行编译,具体创建多少个线程,可以根据 lscpu 命令查询得到的系统中的 CPU 数量来确定。使用 ccache 工具可以缓存目标文件,从而加速执行 make clean 之后,再次执行 make 的速度。
// macro concatenation #define concat_temp(x, y) x ## y #define concat(x, y) concat_temp(x, y)
// macro testing // See https://stackoverflow.com/questions/26099745/test-if-preprocessor-symbol-is-defined-inside-macro #define CHOOSE2nd(a, b, ...) b #define MUX_WITH_COMMA(contain_comma, a, b) CHOOSE2nd(contain_comma a, b) #define MUX_MACRO_PROPERTY(p, macro, a, b) MUX_WITH_COMMA(concat(p, macro), a, b)
// define placeholders for some property #define __P_DEF_0 X, #define __P_DEF_1 X,
// define some selection functions based on the properties of BOOLEAN macro #define MUXDEF(macro, X, Y) MUX_MACRO_PROPERTY(__P_DEF_, macro, X, Y)
// simplification for conditional compilation #define __IGNORE(...) #define __KEEP(...) __VA_ARGS__
// keep the code if a boolean macro is defined #define IFDEF(macro, ...) MUXDEF(macro, __KEEP, __IGNORE)(__VA_ARGS__)