gpt4 book ai didi

visual-studio - cpp 文件中的 Qt、CMake、Visual Studio 和 Q_OBJECT

转载 作者:行者123 更新时间:2023-12-04 15:37:29 25 4
gpt4 key购买 nike

我正在为 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)

然后添加
#include "foo.moc"

在 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 支持的内部结构,而不是使用公共(public) API。

有更好的主意吗?

欢呼,弗朗茨

最佳答案

最近版本的 CMake 具有“automoc”,这对我来说就像一个魅力:
http://blogs.kde.org/2011/11/01/cool-new-stuff-cmake-286-automoc

只需添加 CMakeLists.txt:

set(CMAKE_AUTOMOC TRUE)

然后在 cpp(例如 example.cpp)文件中:
#include "example.moc"

(*.moc 必须与 cpp 文件的名称匹配)。

关于visual-studio - cpp 文件中的 Qt、CMake、Visual Studio 和 Q_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com