Dav*_*and 5 qt g++ conditional-compilation
我的Qt项目链接到一个仅限linux的库.当项目在linux下运行时,我希望使用该库中定义的类型在事件上触发信号.但是,我的一个复杂因素是该项目还必须在Windows中构建.显然,这个信号和捕获它的插槽在Windows中不存在,这很好.但是,我发现Qt的moc工具无法识别#ifdef __linux__出发出信号的代码存在的问题.我的代码看起来像这样:
[SomeFile.h]
#ifdef __linux__
signals:
void SomeSignal(SomeTypeDefinedInTheLinuxLibrary);
#endif
Run Code Online (Sandbox Code Playgroud)
[SomeFile.cpp]
#ifdef __linux__
emit SomeSignal(someObject);
#endif
Run Code Online (Sandbox Code Playgroud)
当我尝试使用g ++编译它时,我收到错误:
SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)
任何想法如何让moc和#ifdefs一起玩得好?
一个更好的解决方案是始终提供信号,并注释掉在Windows 上触发它的代码.这样,公共API在所有平台上都是相同的.
[编辑] moc工具真的很蠢.它实际上并不理解代码; 相反,它只是对某些模式做出反应.这就是为什么它忽略了#ifdef.
要解决此问题,请在其中包装类型或使用#ifndef __linux__并定义您自己的虚拟类型,以便在Windows上进行编译.由于信号不会在Windows上发出,因此永远不会使用插槽,因此任何使代码编译的类型都应该没问题.
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |