Fra*_*une 6 qt cmake visual-studio qobject
我正在为Windows平台开发一个使用Qt 4.6,CMake 2.8和Visual Studio 2008的大型项目.
到构建系统为止,这都是标准的东西:我正在使用CMake的QT4_WRAP_CPP宏从头文件生成moc文件,然后将其链接到add_executable命令中的最终可执行文件.一切都按预期工作.
这种设置的唯一限制是我无法Q_OBJECT在.cpp文件中定义小部件或帮助程序 .对于应该出现在它们使用位置旁边的小型特定于上下文的助手类,这将非常方便.
我试图将整个源文件列表(.h和.cpp)传递给QT4_WRAP_CPP,而不仅仅是头文件,但这不起作用(链接失败,因为一些moc相关的符号是未定义的).
我认为问题是,对于给定的文件对foo.h和foo.cpp,QT4_WRAP_CPP宏将在同一目录中生成相同的moc文件(moc_foo.cxx),显然这意味着第一个文件将被覆盖第二个,结果符号将在链接时丢失.
有没有办法解决或解决这个问题?例如,我试图为表单的foo.cpp添加一个特定的规则
QT4_GENERATE_MOC(directory/foo.cpp directory/foo.moc)
Run Code Online (Sandbox Code Playgroud)
然后添加
#include "foo.moc"
Run Code Online (Sandbox Code Playgroud)
在foo.cpp的末尾.我认为这应该可以工作,但是唉,Visual Studio只允许每个文件一个构建规则,而.cpp文件已经有一个构建规则(编译到目标文件),所以这种方法不起作用,至少使用Visual Studio.
我的另一个想法是创建一个新的宏,比如QT4_WRAP_CPP_WITH_PREFIX,基于QT4_WRAP_CPP(在share/cmake-2.8/Modules/Qt4Macros.cmake中定义),它将采用额外的前缀参数并将此前缀添加到生成的moc中文件.这样,我会调用QT4_WRAP_CPP_WITH_PREFIX两次,一次用于.h文件,一次用于.cpp文件,用不同的前缀.我只是不喜欢这种方法,我会搞乱CMake的Qt支持的内部,而不是使用公共API.
有什么好主意吗?
Cheerz,Franz
小智 1
参考文档“使用 MOC”(http://doc.qt.nokia.com/4.1/moc.html),您只需在实现文件末尾导入“foo.moc”即可。由于您无法相应地调整构建规则,请尝试导出 .pro 文件并按照诺基亚文档的建议应用构建规则。
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |