C++ 是否可以对已经具有主功能的cpp文件运行测试?
在我得到答案之前:“将您希望测试的代码移动到另一个.cpp文件”我不能这样做。我尝试过使用预处理器C++ 是否可以对已经具有主功能的cpp文件运行测试?,c++,unit-testing,testing,c-preprocessor,C++,Unit Testing,Testing,C Preprocessor,在我得到答案之前:“将您希望测试的代码移动到另一个.cpp文件”我不能这样做。我尝试过使用预处理器#如果测试套件#endif但这不起作用,我仍然得到: “main”的多重定义 我编译代码的方式如下: g++ -lmxml -lccpunit -o pic pic.cpp wmcc.cp test.cpp 我在pic.cpp中有一个main,在test.cpp中有另一个main。有办法解决这个问题吗 更新 在my test.cpp中: #define TESTING_SUITE_1 在我的pi
#如果测试套件#endif
但这不起作用,我仍然得到:
“main”的多重定义
我编译代码的方式如下:
g++ -lmxml -lccpunit -o pic pic.cpp wmcc.cp test.cpp
我在pic.cpp中有一个main,在test.cpp中有另一个main。有办法解决这个问题吗
更新
在my test.cpp中:
#define TESTING_SUITE_1
在我的pic.cpp中:
#ifndef TESTING_SUITE_1
int main(...
#endif
不工作您可以指定链接器的另一个入口点。 对于MS cl.exe,代码如下:(抱歉,我没有看到您使用gcc) 或通过项目属性页:
Configuration Properties >
Linker >
Advanced >
Entry Point
或者直接在命令行中:
/entry:alternative_main
对于gcc,它是以下命令行开关:
-Wl,-ealternative_main
有关其他编译器,请参阅手册。您可以通过以下方式编译:
g++ -Dmain=main_pic_moved -c pic.cpp
g++ -Dmain=main_wmcc_moved -c wmcc.cp
g++ -lmxml -lccpunit -o pic pic.o wmcc.o test.cpp
您应该能够
#ifdef
输出现有的main()
。你尝试的时候可能做错了什么。你是怎么做到的?为什么你不能把main
移到另一个翻译单元?@DavidRodríguez dribeas因为我有很多其他的源代码使它复杂化,这只是问题的一小部分。起初我应该这样做,但现在不行。BoBTFish我更新了我的QT代码的大小没有多大关系,你只需要将一个函数提取到不同的翻译单元:main
我有很多其他文件、库和链接,我的意思是其他源代码。我不能简单地移动它而不破坏一切。糟糕的设计,但在发布固定版本以移植main之前,我需要一个修复。我得到:`main\u pic\u moved(int,char**)的多个定义。但我在看德梅因,用那些准确的线?我看不出这是怎么发生的。我得到了:main
的多个定义。在手册页中找不到,版本?-Wl,option
将option
向下传递到链接器(我假定为ld)-e
是-entry
的快捷方式,并指定链接器应使用的入口点。由于。。。我不知道,很长一段时间了:哦,我现在明白了。我没有将test.cpp中的main
更改为alternative\u main
,因为我不明白-但在您的解释之后,我明白了。谢谢
g++ -Dmain=main_pic_moved -c pic.cpp
g++ -Dmain=main_wmcc_moved -c wmcc.cp
g++ -lmxml -lccpunit -o pic pic.o wmcc.o test.cpp