我想为Windows和Linux版本创建一个Makefile。问题是我必须为每个平台链接不同的动态库。 C预处理器可能有很少的好变量,例如_WIN32
。如何提取这些信息?
解决方案必须与交叉编译器一起使用。我无法创建然后运行一个小程序。我只有一个不同的变量CC
,环境可能相同。
另一种方法很简单,-D
切换。
类似但不同的问题:
Makefile that distincts between Windows and Unix-like systems
我使用相同的make程序。只有CC
变量不同。
答案 0 :(得分:1)
我不知道你是否可以直接获得这些变量,但你可以尝试这个解决方案:
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
答案 1 :(得分:0)
根据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)
- 程序员定义的预处理器的可选标志