引用项目的Qt-main()函数覆盖实际项目的main()
Qt - main() function of referenced project covering main() of the actual project
我正在Qt Creator中制作一个单元测试Qt项目,该项目引用了我想要测试的项目中的文件。现在,无论我是通过.pri文件引用我想测试的类,还是通过将相关文件直接添加到单元测试项目的SOURCES和HEADERS变量中(而且.pri文件实际上似乎也这样做,它只包含SOURCES或HEADERS条目),从主项目添加文件似乎会覆盖单元测试项目中的main.cpp。
我的意思是,当我构建并运行uni-tests可执行文件时,原始项目的main()
函数就会运行!如果我重命名原始项目中的main.cpp,或者单元测试项目中的main.cpp(它更改了.pro文件),那么一切都会顺利进行。好吧,我可以接受这样的解决方案,但这让人有点不舒服,因为在未来的某一天,我可能会不小心对这两个项目中的一些文件使用相同的名称,谁知道呢,可能会出现错误,这将是一场噩梦。此外,我只是好奇是什么原因导致了这种行为。
当然,.pri文件只包括类头和cpp文件,而不包括原始应用程序的main.cpp,例如在我的例子中:
HEADERS +=
../Project/fooclass.h
SOURCES +=
../Project/fooclass.cpp
此外,这两个项目都位于相邻的目录中,而不是嵌套的。
编辑:Frank Osterfeld要求查看我的测试专业文件,所以它在这里:
测试的专业文件:
QT += core
QT -= gui
QT += testlib
TARGET = Tests
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES +=
test_class.cpp
main_unit_tests.cpp
HEADERS +=
AutoTest.h
test_class.h
include(trial.pri)
Trial.pri包含我想要测试的主项目中的文件。main_unit_tests.cpp(从原来的main.cpp重命名为特别解决方案)包含:
#include <QtCore/QCoreApplication>
#include "AutoTest.h"
TEST_MAIN
TEST_MAIN
在AutoTest.h中定义为
#define TEST_MAIN
int main(int argc, char *argv[])
{
return AutoTest::run(argc, argv);
}
访问此页面了解AutoTest.h的功能。简而言之,它可以减少使用Qt框架运行多单元测试的麻烦。
编辑:专业。主项目的文件(即包含我想要测试的类的文件)是:
QT += core
QT -= gui
TARGET = Project
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
fooclass.cpp
HEADERS +=
fooclass.h
它就在这条路上:。。。\单元测试\项目而单元测试项目位于以下路径上:。。。\单元测试\测试现在,由于两个项目中定义main()
的文件不同,所以一切都很顺利。一旦我将它们重命名为相同,单元测试项目就会排除原始项目的主要功能。
文件名并不重要,重要的是在单元测试的构建中包含了多少main()函数。不要在单元测试项目的SOURCES中包含您实际应用程序的main.cpp,您应该没事。
GNU make实用程序不是最好的。
若实际应用程序和测试项目的obj文件都创建在同一文件夹中,则可能会链接错误的main.o
。
请确保您的测试项目和实际的应用程序项目构建文件夹不同,或者不要两次使用main.cpp
文件名。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 代码块始终在项目中运行 main.cpp
- 如何将包含多个.cpp源文件的文件夹导入Eclipse项目中,每个源文件都有一个main()定义
- C++编译错误:多个定义"main",但项目中只有一个 main 函数
- 我正在使用Xcode进行c ++编程和学习。为什么我不能在一个项目中放置许多具有 MAIN 功能的单独源文件?
- main()函数位于.cpp文件中,该文件与我在c++中的项目同名
- SDL 项目的调试错误"没有可用于 main() 的源代码"
- 对于我的C ++项目,我在Eclipse中创建了子文件夹,如何将其包含在main中
- 在 Visual Studio 中调用 Python 中的C++项目 main()
- 在 Visual Studio 中多次运行 C++ 项目 main()
- 可视化 C++项目中的两个 main() 不会生成
- 项目文件夹c++中没有任何.cpp文件的main的多个定义
- 在VS2010上拥有多个项目和多个"main"功能
- Netbeans(C++)项目中的多个main()函数
- 使用QMake如何为每个main()构建一个项目
- C++:新建空项目(如何创建,添加main方法并打印"Hello, world")?