从 C 预处理器导入变量到 Makefile
Import variables from C preprocessor into Makefile
我想为 Windows 和 Linux 构建创建一个 Makefile。问题是我必须 link 为每个平台使用不同的动态库。 C 预处理器可能有一些不错的变量,例如 _WIN32
。如何提取这些信息?
该解决方案必须使用交叉编译器。我无法创建然后 运行 一个小程序。我只有一个,不同的变量,CC
,环境可能是一样的。
反过来也很简单,-D
开关。
类似但不同的问题:
Makefile that distincts between Windows and Unix-like systems
我使用相同的制作程序。只有 CC
变量不同。
我不知道你是否可以直接获得这些变量,但你可以试试这个解决方案:
CPP=i686-w64-mingw32-cpp
CPPFLAGS= -P
WIN32=$(shell echo _WIN32 | $(CPP) $(CPPFLAGS))
iswin32:
@echo $(WIN32)
这个例子会输出 1:
$ make iswin32
1
如果您正在处理多个声明,还可以考虑创建一个包含所有声明的文件,对其进行预处理并将其包含在 makefile 中。
$ cat declaration
WIN32 = _WIN32
基于 TTK
的回答
用变量创建文件,像这样:
#ifdef _WIN32
-lgdi32 -lopengl32
#else
-lpthread -lX11 -lXxf86vm -lXcursor -lXrandr -lXinerama -lXi -lGL
#endif
Makefile 中类似这样的内容:
A_FLAGS = $(strip $(shell $(CPP) -P $(CPPFLAGS) ./a_flags.cpp))
# or
A_FLAGS = $(strip $(shell $(CPP) -P -xc $(CPPFLAGS) ./a_flags))
$(CPP)
– C 预处理器可执行文件,应由 Make 程序定义
-P
– 禁止生成线标记的标志
-xc
– 强制预处理器将文件视为 C 源代码的标志
$(CPPFLAGS)
– 程序员定义的预处理器的可选标志
我想为 Windows 和 Linux 构建创建一个 Makefile。问题是我必须 link 为每个平台使用不同的动态库。 C 预处理器可能有一些不错的变量,例如 _WIN32
。如何提取这些信息?
该解决方案必须使用交叉编译器。我无法创建然后 运行 一个小程序。我只有一个,不同的变量,CC
,环境可能是一样的。
反过来也很简单,-D
开关。
类似但不同的问题:
Makefile that distincts between Windows and Unix-like systems
我使用相同的制作程序。只有 CC
变量不同。
我不知道你是否可以直接获得这些变量,但你可以试试这个解决方案:
CPP=i686-w64-mingw32-cpp
CPPFLAGS= -P
WIN32=$(shell echo _WIN32 | $(CPP) $(CPPFLAGS))
iswin32:
@echo $(WIN32)
这个例子会输出 1:
$ make iswin32
1
如果您正在处理多个声明,还可以考虑创建一个包含所有声明的文件,对其进行预处理并将其包含在 makefile 中。
$ cat declaration
WIN32 = _WIN32
基于 TTK
的回答用变量创建文件,像这样:
#ifdef _WIN32
-lgdi32 -lopengl32
#else
-lpthread -lX11 -lXxf86vm -lXcursor -lXrandr -lXinerama -lXi -lGL
#endif
Makefile 中类似这样的内容:
A_FLAGS = $(strip $(shell $(CPP) -P $(CPPFLAGS) ./a_flags.cpp))
# or
A_FLAGS = $(strip $(shell $(CPP) -P -xc $(CPPFLAGS) ./a_flags))
$(CPP)
– C 预处理器可执行文件,应由 Make 程序定义
-P
– 禁止生成线标记的标志
-xc
– 强制预处理器将文件视为 C 源代码的标志
$(CPPFLAGS)
– 程序员定义的预处理器的可选标志