【发布时间】:2016-11-13 23:14:01
【问题描述】:
我有一个项目,我想在带有 Microsoft Visual Studio 和 GCC 的 Windows 系统上编译。我有一个环境变量用于选择要使用的编译器(例如 COMPILER=VS 或 COMPILER=GCC)。第一个问题是GCC的“包含选项”是-I,而Visual Studio的包含选项是/I。
因此我有一个变量来指定所需的包含选项标志:
ifeq ($(COMPILER), VS)
INCLUDE_DELIMITER = /I
else
INCLUDE_DELIMITER = -I
endif
现在我建立了一个需要包含的路径列表:
COMPILER_INCLUDE_PATH = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include"
UCRT_INCLUDE_PATH = "C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt"
UM_INCLUDE_PATH = "C:\Program Files (x86)\Windows Kits\8.1\Include\um"
WINFAMILY_INCLUDE_PATH = "C:\Program Files (x86)\Windows Kits\8.1\Include\shared"
INCLUDE_LIST = $(COMPILER_INCLUDE_PATH) $(UCRT_INCLUDE_PATH) $(UM_INCLUDE_PATH) $(WINFAMILY_INCLUDE_PATH)
所以现在 INCLUDE_LIST 是引用字符串的列表(由于 windows 路径中的空格)。如何创建一个将 INCLUDE_DELIMITER(特定于编译器)添加到每个字符串的变量?
我试过了:
INCLUDES = $(patsubst, "%", $(INCLUDE_DELIMITER)"%", $(INCLUDE_LIST))
没有鸟。我也试过了:
INCLUDES = $(foreach d, $(INCLUDE_LIST), $(INCLUDE_DELIMITER)$d)
但这导致 INCLUDE_LIST 中的每个空格都被检测为一个新词。
【问题讨论】:
-
你考虑过使用cmake吗?