我在我的 Qt 创建器中创建了两个 c++ 项目。第一个是 Application project
另一个是 unit-test project
。这两个项目分别工作正常。但是,当将两者联系在一起时,我遇到了一个小问题。
我包括 #INCLUDEPATH applicationProjectPath
在 .pro file
在 unit-test project
。然后 #include myClass
来自 main.cpp
的 unit-test project
的应用程序项目。然后,从 myClass
创建一个 myObject
--- 并在该对象中调用一个函数。
编译时出现这个错误:
undefined reference to `myObject::function'
但是,当将 #SOURCES applicationProjectPath/myClass.cpp
添加到单元测试项目的 .pro 文件中时(同时保留 #INCLUDEPATH applicationProjectPath
),一切正常(即:执行测试单元)
再次从.pro中删除 #INCLUDEPATH
时,它再次崩溃。
我想如果我包括 #SOURCES
,那么我不需要包括 #INCLUDEPATH
。如果我包括了 #INCLUDEPATH
,我不应该包括 #SOURCES
(至少没有完整路径,只有 .cpp 文件,然后编译器应该查找两个目录,默认一个和添加的一个)。
所以,我的问题是:为什么会这样
原文由 hashDefine 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的单元测试将需要编译您想要单元测试的项目中的类。因此,您需要在两个项目中添加包含(否则测试项目将不知道您要测试的类)。并且链接器也需要链接到项目的代码,因为您的测试将使用这些类。
一种方法是在测试项目中添加要测试的类,并在编译单元测试项目时再次编译它们,但这很乏味而且不是很方便,因为每次要添加类时,都需要添加将它添加到两个 .pro 文件中(提示,您可以在 .pro 文件中使用通配符,例如 *.cpp 将文件夹中的所有源文件添加到项目中)。
我认为更好的方法是将要测试的项目设置为静态库,将其与应用程序分开:您有另一个项目是应用程序,仅包含
main.cpp
链接到该静态库.这是包含项目的文件夹的表示:
项目.pro:
UIProject.pro:
MainProject.pro:
UITestProject.pro:
您必须对其进行编辑以匹配您的项目,但主要内容在这里。它应该可以工作,因为我从我的一个项目中复制了它,前提是我没有添加任何错误。