如果满足条件,则包括cpp文件 在我的文件C++项目中,只有在满足某些条件时才需要包含文件。

如果满足条件,则包括cpp文件 在我的文件C++项目中,只有在满足某些条件时才需要包含文件。,c++,include,c-preprocessor,C++,Include,C Preprocessor,目标代码类似于 #if condition1 #include file1.cpp #endif #if condition2 #include file2.cpp #endif 我真的不知道如何解决这个问题#include是一个预处理器语句,而if条件必须在程序中计算。在上面的代码中,没有加载任何文件,因为两个条件都没有满足。如果我换成 if condition1{ #include file1.cpp ... 由于预处理器查找#include语句而不考虑if语句,所有文

目标代码类似于

#if condition1
   #include file1.cpp
#endif
#if condition2
   #include file2.cpp
#endif
我真的不知道如何解决这个问题#include是一个预处理器语句,而if条件必须在程序中计算。在上面的代码中,没有加载任何文件,因为两个条件都没有满足。如果我换成

if condition1{
   #include file1.cpp
...
由于预处理器查找#include语句而不考虑if语句,所有文件都会被包含


到目前为止,我还没有发现第三种可能性

一般的答案是,你不能按照你想做的方式做你想做的事。然而,根据你的目标是什么,可能有办法实现它。(您还没有提到您使用的开发环境。)

1) 您可以为包含不同cpp文件的不同版本创建不同的目标。大多数C++环境都有选项在命令行中传递值定义值,因此可以通过这种方式传递目标名称。然后,您可以在编译时使用#if指令来测试您正在构建的目标


2) 您可以编译和链接不同的cpp文件,这些文件作为单独的二进制文件,并在运行时将其动态加载到程序中。我相信在像.NET这样的环境中,这是很容易的,但是在C++项目中可能会有更多的工作,这还要取决于你的环境和你想要做的事情。然而,根据你的目标是什么,可能有办法实现它。(您还没有提到您使用的开发环境。)

1) 您可以为包含不同cpp文件的不同版本创建不同的目标。大多数C++环境都有选项在命令行中传递值定义值,因此可以通过这种方式传递目标名称。然后,您可以在编译时使用#if指令来测试您正在构建的目标


2) 您可以编译和链接不同的cpp文件,这些文件作为单独的二进制文件,并在运行时将其动态加载到程序中。我相信在像.NET这样的环境中,这是很容易的,但是在C++项目中可能会有更多的工作,这还要取决于你的环境和你想做的事情。只要可以在编译时建立条件,第一个代码就是有效的。如果您想测试运行时条件,您必须以另一种方式设计代码,因为它不能通过预处理器完成。为什么要包含.cpp文件?我有一种不好的感觉,即预处理器无法完成此操作。.cpp是数据文件。根据代码的某些结果,应加载正确的结果。这种格式的设计使得它可以很容易地包含在代码中……广义地说,您无法在运行时决定编译什么代码。这试图解决的根本问题是什么?正如[FYI]一样,不应包括cpp文件。如果您需要基于不同内容编译不同的cpp文件,那么这通常表示您需要使用makefile来构建项目。您希望测试什么样的条件?只要可以在编译时建立条件,第一个代码就是有效的。如果您想测试运行时条件,您必须以另一种方式设计代码,因为它不能通过预处理器完成。为什么要包含.cpp文件?我有一种不好的感觉,即预处理器无法完成此操作。.cpp是数据文件。根据代码的某些结果,应加载正确的结果。这种格式的设计使得它可以很容易地包含在代码中……广义地说,您无法在运行时决定编译什么代码。这试图解决的根本问题是什么?正如[FYI]一样,不应包括cpp文件。如果您需要基于不同内容编译不同的cpp文件,那么这通常表示您需要使用makefile来构建项目。