我有一个配置类,我想将其用于各种构建。类本身在构建之间发生变化,但类名保持不变,头文件名也是如此。
此类的不同版本保存在不同的子文件夹中。
例如。
main/config.h
main/config.cpp
secondary/config.h
secondary/config.cpp
是否有一种好方法可以通过编译时标志或命令行选项让构建确定要使用的 header /cpp?我已经有很多配置,并希望将来有更多配置。我想避免一长串#ifdef/#elif/#elif/etc..
编辑:我想避免单独构建,并想避免在整个代码中使用#defines。如果我之前没有说清楚,我很抱歉! >_<
最佳答案
根据您使用的构建系统,您将创建一个指向主路径或辅助路径的变量。然后使用此变量附加到 INCLUDE
路径,以便您的所有源在需要访问配置时只需 #include "config.h"
即可。在您的 Makefile(或等效文件)中,您需要将 $CONFIGPATH/config.cpp
添加到要构建的源中。
MSBuild
更新源文件路径:
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="$(ConfigToUse)/config.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(ConfigToUse)/config.h" />
</ItemGroup>
包含路径:
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<ShowAllFiles>false</ShowAllFiles>
<IncludePath>...;$(ConfigToUse);</IncludePath>
</PropertyGroup>
然后调用msbuild build.xml/p:ConfigToUse=PathToConfig
关于c++ - 我可以设置编译时标志以包含标题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083205/