我可以设置编译时标志来包含标头吗?

Mai*_*ixy 5 c++ compilation header

我有一个配置类,我想将其用于各种构建。类本身在构建之间发生变化,但类名保持不变,头文件名也保持不变。

此类的单独版本保存在单独的子文件夹中。

前任。

  • 主/配置.h

  • 主/配置.cpp

  • 辅助/config.h

  • 辅助/config.cpp

有没有一种好方法可以通过编译时标志或命令行选项让构建确定要使用哪个标头/cpp?我已经有了相当多的配置,并且预计将来会有更多。我想避免一长串#ifdef/#elif/#elif/等等。

编辑:我想避免单独构建,并且希望避免在整个代码中使用#defines。如果我之前没有说清楚的话,我很抱歉!>_<

Jes*_*ogt 2

根据您使用的构建系统,您将创建一个指向主路径或辅助路径的变量。然后使用此变量附加到路径INCLUDE,以便所有源都可以#include "config.h"在需要访问配置时使用。在您的 Makefile(或同等文件)中,您需要将其添加$CONFIGPATH/config.cpp到要构建的源代码中。

微软构建

更新源文件路径:

<ItemGroup>
    <ClCompile Include="main.cpp" />
    <ClCompile Include="$(ConfigToUse)/config.cpp" />
</ItemGroup>
<ItemGroup>
     <ClInclude Include="$(ConfigToUse)/config.h" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

以及包含路径:

<PropertyGroup>
    <ConfigurationType>Application</ConfigurationType>
    <ShowAllFiles>false</ShowAllFiles>
    <IncludePath>...;$(ConfigToUse);</IncludePath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

然后打电话msbuild build.xml /p:ConfigToUse=PathToConfig