【问题标题】:compile order eclipse c++编译命令eclipse c++
【发布时间】:2018-04-21 03:42:12
【问题描述】:

我正在尝试使用 Gtest 进行单元测试。

我正在创建另一个项目,其中包含要测试的原始项目(通过链接)中的文件。然后,在新项目中,我创建了要测试的函数或单元的附加依赖项的假实现和模拟。在原始项目的文件中,我使用#ifdef 来包含原始依赖项或假实现

我面临的问题是我需要按特定顺序编译文件,以便在构建测试项目时包含虚假实现。 我在带有 MinGW、GNU Builder 的 Windows 10 上使用 MCUXpresso

预测任何解决方法或方法来控制文件的编译顺序。

#ifdef IsTesting        //This is part or original project, original header files
#include "Fake_dependency"
#else
#include "Original_Dependency"
#endif

然后在我定义的新项目中

#define IsTesting true // Part of Test_Project, followed by other code for testing

当我编译新项目或测试项目时,我需要此文件定义此变量,以便先编译或早于我从原始项目链接的文件进行编译

【问题讨论】:

  • cpp 文件的编译顺序无关紧要。也许你的意思是链接顺序?
  • 编译顺序在 C++ 中并不重要。您可能需要在 C++ 文件中包含正确的头文件...
  • 我不太明白为什么顺序与您的情况相关,但如果您确实需要按特定顺序编译,那么您可以构建自己的Makefile
  • 我收到编译错误,因为它试图包含新项目中不存在的头文件。发生这种情况是因为编译器不知道该变量是在编译时定义的,因此我没有任何控制权。
  • 以某种方式编写自己的 Makefile 是不可能和/或不允许的。 MCUXpresso 生成自己的 Makefile 并在每次构建中覆盖,因此编辑它们也不起作用

标签: c++ eclipse compilation include


【解决方案1】:

您可以将定义添加到测试项目的构建配置中,而不是在测试代码中定义 IsTesting

转到属性 -> C/C++ 常规 -> 路径和符号 -> 选择适当的语言(GNU C++)并添加“IsTesting”(没有任何值)

如果您希望 Eclipse 正确获取已编译代码(未编译代码为灰色),则必须切换 Properties -> C/C++ General -> Indexer -> Use active build configuration as well

【讨论】:

  • 感谢您的解决方案。不过这引发了我的好奇心。编译器如何知道项目设置中定义的变量?
  • Eclipse 使用项目设置来处理自动化构建。对我来说,这意味着 eclipse 改变了生成的构建命令。但我想这取决于你使用什么样的构建系统。最后就是我们所说的构建配置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
相关资源
最近更新 更多