我有一个 VS2008 解决方案,其中有一个 C++ 项目(为清楚起见,我们将其命名为 Project1)。该项目的目的是测试由同一解决方案中的另一个 C++ 项目 (Project2) 编译生成的可执行文件。正在测试的可执行文件 (Project2.exe) 与我们的 Project1 (Project1.exe) 生成的可执行文件位于同一文件夹中。这是构建文件夹中的内容:
构建路径/调试
- Project1_Debug.exe
- Project2_Debug.exe
构建路径/发布
- Project1.exe
- Project2.exe
项目 Project1 在配置管理器中设置为始终在调试中构建(即使解决方案在发布时构建),因为当 Project1 中使用的第三方工具之一出现问题时我们在发布中编译。因此,任何可以识别 Project1 的配置的预处理器定义都将始终设置为调试。知道这一点以及当解决方案配置设置为在发布中构建时 Project2 在发布中构建的事实,project1 如何在发布中构建解决方案时找到 project2,因为它总是在它所在的同一文件夹中搜索强>?
约束:
- 我无法更改构建文件夹结构
- 如前所述,使用 Project1 的预处理器定义和宏,例如
$(Configuration)
在这里无济于事,因为$(Configuration)
将绑定(bind)到 Project1 的配置,并且将始终设置为调试。
我正在使用 GetModuleFileName
要获取 Project1 的可执行文件并从该位置(始终位于调试文件夹中),我找到的唯一解决方案是搜索代表当前解决方案配置的宏,这将帮助我在构建时获取发布文件夹中的 Project2.exe通过添加 ../Release
发布我的解决方案(但 Project1 仍在调试中)通过添加 ../Debug
在我的路径中,当 Project2 实际上位于调试文件夹中时(当解决方案在调试中构建时)留在调试文件夹中在我的道路上。
一些伪代码看起来像这样:
If SOLUTION_CONFIGURATION == DEBUG // Project 1 and Project2 is in debug folder
add ../Debug in my research path to locate Project2_Debug.exe from Project1_Debug.exe's location
Else if SOLUTION_CONFIGURATION == RELEASE // Project1 is in debug and Project2 is in release folder
add ../Release in my research path to locate Project2.exe from Project1_Debug.exe's location
End if
最佳答案
没有用于表示配置和版本信息的标准 宏。
但是,MS 维护了一个列表 predefined macros对于 Visual Studio。
有些可能适用于其他编译器。
附言我通过使用关键字“Visual Studio 预定义宏”搜索互联网找到了该站点。
关于c++ - 在 Visual Studio 的 C++ 项目中是否可以使用宏来识别当前的 SOLUTION 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126740/