我正在尝试使用boost.wave作为预处理器,而不是编译器附带的预处理器。我无法弄清楚如何实现这一目标。
我正在使用CMake作为构建系统生成器,如何指定我的预处理器是boost.wave。这应该适用于Windows(MSVC)和Linux(gcc)。
谷歌搜索和搜索Stack Overflow档案没有得出任何答案
编译器无论如何都要预处理文件。所以看起来这里涉及两个预处理步骤。
答案 0 :(得分:2)
这是一个两步过程。
首先,您必须告诉CMake使用Wave作为自定义命令:使用CMake的add_custom_command
。一旦定义了此命令,只要您为自定义命令指定的依赖关系匹配,就会调用它。
其次,您必须弄清楚所有预定义的宏和(系统)包含编译器正常使用的路径。 Wave对特定编译器一无所知。因此,为了对特定编译器正确地预处理文件,所有(相关的)预定义宏(通常由编译器预定义)和所有系统包含路径(默认情况下通常为编译器所知)都需要在调用时传递波。如果将所有这些选项放在Wave的命令行上太繁琐(可能是这样),您可以为Wave创建options file(使用@cfgfile
将其添加到命令行)。以下是MSVC 2005的一个示例:
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\include
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include
-D_MT
-D_MSC_VER=1400
-D_MSC_FULL_VER=140050727
-D_MSC_EXTENSIONS
-D_M_IX86
当然,您也可以在此处为Wave添加其他选项。为不同的编译器提供不同的配置文件应该可以更容易地从CMake内部进行管理。