通过从QMake中删除moc生成步骤,我不再需要依赖QtCreator。目前,我正在使用自定义脚本来生成/更新Qt moc文件,然后再在eclipse中通过GYP生成makefile。有谁知道如何将 moc 作为构建规则添加到 GYP 以便我可以合并此步骤?
目前,我将脚本作为每次运行的 eclipse 内部的构建规则,但我想通过让 GYP 像 QMake 一样生成一个 makefile 并且已经包含 moc 规则来避免这种方法。
感兴趣的链接:
参考使用 GYP 开发 Qt:https://groups.google.com/group/gyp-developer/browse_thread/thread/42cfb9902b86d715/b17701d9a6805671?show_docid=b17701d9a6805671
GYP主页:http://code.google.com/p/gyp/
Q商城主页:http://qt-project.org/doc/qt-4.8/qmake-manual.html
我当前的 moc 脚本:
#!/bin/bash
MOC="/path/to/Qt/4.8.1/gcc/bin/moc"
SRC_DIR="/path/to/project"
$MOC $SRC_DIR/SkDebuggerUI.h -o $SRC_DIR/moc_SkDebuggerUI.cpp
$MOC $SRC_DIR/SkQtWidget.h -o $SRC_DIR/moc_SkQtWidget.cpp
我有完全相同的问题。我没有使用 moc 脚本包含单独的步骤,而是将以下行添加到我的 .gyp 文件中。
'conditions': [
['OS=="linux"': {
'sources': [
'your other source code files',
'<!(moc numerickeypad.h -o moc_numerickeypad.cpp && echo moc_numerickeypad.cpp)',
],
}],
],
我没有在其他操作系统上尝试过,但我认为你可以在其他系统上类似地这样做。让我知道,如果你已经找到了更好的方法。
我刚刚经历了这个,虽然它并不完美,但它是可行的。 我做了以下工作:
- 为生成 moc 制定了单独的"目标"
- 如果该目标只有我们要在其上运行 moc 作为"源"的 .h 文件 ?
- 将生成的.cpp文件公开为direct_dependent_settings,因此它们的源在依赖目标中编译
- 构建一个"规则",对"源"列表中的每个头文件运行 moc。
- 我的可执行文件依赖于该目标
它看起来像这样:
'targets':
[
{
'target_name': 'editor_generate_mocs',
'type': 'none',
'sources':
[
'src/editorwindow.h',
],
'direct_dependent_settings':
{
'sources':
[
'<(SHARED_INTERMEDIATE_DIR)/editorwindow_moc.cpp',
]
},
'rules':
[
{
'rule_name': 'generate_qt_mocs_rule',
'extension': '.h',
'msvs_cygwin_shell' : 0, # Don't run cygwin set_env to run a command.
'inputs':
[
'>(qt_dir)/bin/moc.exe',
],
'outputs':
[
'<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT)_moc.cpp',
],
'action':
[
'>(qt_dir)/bin/moc.exe',
'--compiler-flavor', 'msvc',
'<(RULE_INPUT_PATH)',
'-o', '<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT)_moc.cpp'
],
'message': '<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT)_moc.cpp'
}
]
},
# ..., rest of my targets
}
]