从makefile定义宏函数
Defining macro function from makefile
假设我的makefile中有以下条目:
ifeq ($(MY_DEBUG),yes)
EXTRACXXFLAGS += -DMY_DEBUG=2
endif
我用make foo MY_DEBUG=yes
调用它现在我基本上有
#define MY_DEBUG 2
所有可用的项目文件。
问题:我可以在整个项目中以这种方式定义宏函数,而不包括-include
或其他方式的某种头文件吗?
我需要的是这样的东西在我的makefile:
/* not working code */
ifeq ($(MY_DEBUG),yes)
EXTRACXXFLAGS += -Ddbg_print(...)=printf(##__VA_ARGS__)
endif
通常我会在一些头文件中定义这个宏函数,包括在整个项目中,但是这个特殊的项目太大了,没有这样的头文件。
如果一个头文件包含在所有地方,这是一种方法:
Makefile
# this is in makefile
ifeq ($(MY_DEBUG),yes)
EXTRACXXFLAGS += -DMY_DEBUG
endif
globally_included_header.h
// header, included all over the project
#ifdef MY_DEBUG
# define dbg_print(...) printf(##__VA_ARGS__)
#else
# define dbg_print(...)
#endif
您可以通过将此添加到CXX标志中来从命令行插入标题到所有源:
-include "path/to/header.h"
编辑:在你的特殊情况下,你也可以把它传递给CXX
标志来创建一个宏函数:
-D'dbg_print(...)=printf(__VA_ARGS__)'
在windows上,它适用于"
而不是'
您可以在gcc -include
或cl -FI
(Windows Visual Studio)的所有源文件中包含这样的头文件。
把你的调试函数放在一个文件中,由#ifdef
保护,并在make命令中指定调试标志和文件。
总结:
在Makefile
ifeq ($(MY_DEBUG),yes)
EXTRACXXFLAGS += -DMY_DEBUG
endif
...
$(CC) $(EXTRACXXFLAGS) -include globally_included_header.h ...
globally_included_header.h
// header, included all over the project
#ifdef MY_DEBUG
# define dbg_print(...) printf(##__VA_ARGS__)
#else
# define dbg_print(...)
#endif
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义