python - WAFを使用したQTプロジェクトの構築

原文 python qt wsh waf

wafを使用してプロジェクトをビルドしようとしています。プロジェクトは正しくコンパイルされていますが、リンクエラーが発生します。リソースファイル(.qrcファイル)へのリンクに失敗します


main.cpp.1.o:関数main': /home/sobingt/project/masterdetail/build/../main.cpp:20: undefined reference to qInitResources_masterdetail() '内


WAF出力--zones = deps

    sobingt@tuneb03-System-Product-Name:~/projects/masterdetail$ ./waf --zones=deps 
Waf: Entering directory `/home/sobingt/projects/masterdetail/build'
10:49:34 deps deps for [/home/sobingt/projects/masterdetail/main.cpp]: [/home/sobingt/projects/masterdetail/mainwindow.h, /home/sobingt/projects/masterdetail/listmodel.h, /home/sobingt/projects/masterdetail/cache.h, /home/sobingt/projects/masterdetail/tablemodel.h, /home/sobingt/projects/masterdetail/mytablemodel.h]; unresolved ['QApplication', 'QPalette', 'QPixmap', 'QSplashScreen', 'qthread.h', 'boost/scoped_ptr.hpp', 'QMainWindow', 'QModelIndex', 'QAbstractListModel', 'QList', 'QVariant', 'tr1/unordered_map', 'QAbstractTableModel', 'QStringList', 'iostream', 'sstream', 'vector']
10:49:34 deps scanner for qxx: main.cpp -> build/main.cpp.1.o  returned [/home/sobingt/projects/masterdetail/mainwindow.h, /home/sobingt/projects/masterdetail/listmodel.h, /home/sobingt/projects/masterdetail/cache.h, /home/sobingt/projects/masterdetail/tablemodel.h, /home/sobingt/projects/masterdetail/mytablemodel.h] ['QApplication', 'QPalette', 'QPixmap', 'QSplashScreen', 'qthread.h', 'boost/scoped_ptr.hpp', 'QMainWindow', 'QModelIndex', 'QAbstractListModel', 'QList', 'QVariant', 'tr1/unordered_map', 'QAbstractTableModel', 'QStringList', 'iostream', 'sstream', 'vector']
[14/15] qxx: main.cpp -> build/main.cpp.1.o
[15/15] cxxprogram: build/main.cpp.1.o build/mainwindow.cpp.1.o build/masterdetail_rc.o build/cache.cpp.1.o build/listmodel.cpp.1.o build/model.cpp.1.o build/mysortfilterproxymodel.cpp.1.o build/mytablemodel.cpp.1.o build/song.cpp.1.o build/songitem.cpp.1.o build/songs.cpp.1.o build/tablemodel.cpp.1.o build/tableproxymodel.cpp.1.o -> build/app
main.cpp.1.o: In function `main':
/home/sobingt/projects/masterdetail/build/../main.cpp:20: undefined reference to `qInitResources_masterdetail()'
main.cpp.1.o: In function `~MainWindow':
/home/sobingt/projects/masterdetail/build/../mainwindow.h:22: undefined reference to `vtable for MainWindow'
/home/sobingt/projects/masterdetail/build/../mainwindow.h:22: undefined reference to `vtable for MainWindow'
mainwindow.cpp.1.o: In function `MainWindow':
/home/sobingt/projects/masterdetail/build/../mainwindow.cpp:22: undefined reference to `vtable for MainWindow'
/home/sobingt/projects/masterdetail/build/../mainwindow.cpp:22: undefined reference to `vtable for MainWindow'
mainwindow.cpp.1.o: In function `ListItem':
/home/sobingt/projects/masterdetail/build/../listmodel.h:14: undefined reference to `vtable for ListItem'
mainwindow.cpp.1.o: In function `MainWindow::tr(char const*, char const*)':
/home/sobingt/projects/masterdetail/build/../mainwindow.h:24: undefined reference to `MainWindow::staticMetaObject'
mainwindow.cpp.1.o: In function `SongItem':
/home/sobingt/projects/masterdetail/build/../songitem.h:17: undefined reference to `vtable for SongItem'
listmodel.cpp.1.o: In function `ListModel':
/home/sobingt/projects/masterdetail/build/../listmodel.cpp:7: undefined reference to `vtable for ListModel'
listmodel.cpp.1.o: In function `~ListModel':
/home/sobingt/projects/masterdetail/build/../listmodel.cpp:27: undefined reference to `vtable for ListModel'
mysortfilterproxymodel.cpp.1.o: In function `MySortFilterProxyModel':
/home/sobingt/projects/masterdetail/build/../mysortfilterproxymodel.cpp:4: undefined reference to `vtable for MySortFilterProxyModel'
mytablemodel.cpp.1.o: In function `MyTableModel':
/home/sobingt/projects/masterdetail/build/../mytablemodel.cpp:3: undefined reference to `vtable for MyTableModel'
tablemodel.cpp.1.o: In function `TableModel':
/home/sobingt/projects/masterdetail/build/../tablemodel.cpp:9: undefined reference to `vtable for TableModel'
collect2: ld returned 1 exit status
Waf: Leaving directory `/home/sobingt/projects/masterdetail/build'
Build failed
 -> task failed (exit status 1): 
    {task 14658768: cxxprogram main.cpp.1.o,mainwindow.cpp.1.o,masterdetail_rc.o,cache.cpp.1.o,listmodel.cpp.1.o,model.cpp.1.o,mysortfilterproxymodel.cpp.1.o,mytablemodel.cpp.1.o,song.cpp.1.o,songitem.cpp.1.o,songs.cpp.1.o,tablemodel.cpp.1.o,tableproxymodel.cpp.1.o -> app}
['/usr/bin/g++', 'main.cpp.1.o', 'mainwindow.cpp.1.o', 'masterdetail_rc.o', 'cache.cpp.1.o', 'listmodel.cpp.1.o', 'model.cpp.1.o', 'mysortfilterproxymodel.cpp.1.o', 'mytablemodel.cpp.1.o', 'song.cpp.1.o', 'songitem.cpp.1.o', 'songs.cpp.1.o', 'tablemodel.cpp.1.o', 'tableproxymodel.cpp.1.o', '-o', '/home/sobingt/projects/masterdetail/build/app', '-Wl,-Bstatic', '-Wl,-Bdynamic', '-lQtCore', '-lQtGui', '-lQtCore', '-lQtOpenGL', '-lQtGui', '-lQtCore', '-lQtSvg', '-lQtGui', '-lQtCore', '-lQtSql', '-lQtCore', '-lQtUiTools', '-lQtXml', '-lQtCore', '-lQtScript', '-lQtCore']


wscriptファイル

VERSION='0.0.1'
APPNAME='qt4_test'

top = '.'
out = 'build'

def options(opt):
    opt.load('compiler_cxx qt4')

def configure(conf):
    conf.load('compiler_cxx qt4')
    conf.env.append_value('CXXFLAGS', ['-g']) # test

def build(bld):
    def build(bld):
bld(
    features = 'qt4 cxx',
    uselib   = 'QTCORE QTGUI QTOPENGL QTSVG QWIDGET QTSQL QTUITOOLS QTSCRIPT',
    includes = bld.env.INCLUDES_QTGUI,
    source   = 'mainwindow.cpp masterdetail.qrc cache.cpp listmodel.cpp model.cpp mysortfilterproxymodel.cpp mytablemodel.cpp  song.cpp songitem.cpp songs.cpp tablemodel.cpp tableproxymodel.cpp',
    target   = 'mainwindow.o',
)   
bld(
    features = 'qt4 cxx cxxprogram',
    uselib   = 'QTCORE QTGUI QTOPENGL QTSVG QWIDGET QTSQL QTUITOOLS QTSCRIPT',
    includes = bld.env.INCLUDES_QTGUI,
    source   = 'main.cpp',
    target   = 'app',
    use  = 'mainwindow.o',

)


ツリー構造

├── build
│   ├── c4che
│   │   ├── build.config.py
│   │   └── _cache.py
│   ├── config.log
│   ├── main.cpp.1.o
│   ├── masterdetail_rc.cpp
│   └── masterdetail_rc.o
├── cache.cpp
├── cache.h
├── images
│   ├── betaLogo.png
│   ├── exitButton.gif
│   ├── icon.png
│   ├── image.png
│   ├── mas.png
│   ├── play.png
│   ├── saveButton.png
│   ├── stopbutton.png
│   └── stop.png
├── listmodel.cpp
├── listmodel.h
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── Makefile
├── masterdetail64.png
├── masterdetail80.png
├── masterdetail.desktop
├── masterdetail_harmattan.desktop
├── masterdetail.pro
├── masterdetail.pro.user
├── masterdetail.qrc
├── masterdetail.svg
├── model.cpp
├── model.h
├── mysortfilterproxymodel.cpp
├── mysortfilterproxymodel.h
├── mytablemodel.cpp
├── mytablemodel.h
├── repository.db
├── song.cpp
├── song.h
├── songitem.cpp
├── songitem.h
├── songs.cpp
├── songs.h
├── tablemodel.cpp
├── tablemodel.h
├── tableproxymodel.cpp
├── tableproxymodel.h
├── tableUnit.cpp
├── waf
├── waf-1.6.11
├── wscript


私はそれが愚かな間違いであることを知っています。助けてください。
Question posted in qtcentreへのリンク
私はそれが愚かな間違いであることを知っています。助けてください。 qtcentreに投稿された質問へのリンク

私が今試している解決策:
Q_OBJECTマクロを含むすべてのヘッダー(またはソース)ファイルでmocを実行しています。

 moc -o moc_something.cpp something.h


そしてmoc_something.cppがビルドされるソースに追加されます。

私はリソースコンパイラに挑戦しています:

 rcc -o masterdetail.cpp masterdetail.qrc


次に、masterdetail.cppをビルドするソースに追加する必要があります。

上記はqmakeによって自動的に行われると思います。適切な解決策を見つけるために手動でコンパイルしています。
答え
wafがmocファイルを収集していないようです。 waf docsによると、次のようなものを追加してみてください:

from waflib.TaskGen import feature, before_method, after_method

@feature('cxx')
@after_method('process_source')
@before_method('apply_incpaths')
def add_includes_paths(self):
        incs = set(self.to_list(getattr(self, 'includes', '')))
        for x in self.compiled_tasks:
                incs.add(x.inputs[0].parent.path_from(self.path))
        self.includes = list(incs)


process_sourceはmocファイルの処理を処理する必要があります
関連記事

c++ - qextserialportはWindowsでデータをドロップします—それに対して何ができますか?

python - PyQt4:QListWidget間でアイテムを移動する

.net - XMLファイルの重複する値を削除して最後の値を保持する方法

python - Django:不要なSQLステートメントを回避するにはどうすればよいですか?

python - Mechanize(Python)を使用してリダイレクトログを取得する

python - pyodbcを使用したmdbテーブルの結合

python - Pythonを使用したネットワーク経由の効率的な大容量ファイルハッシュ

python - djangoで抽象ビューを単体テストする

python - Pythonの複数の入力行にまたがるレコードの読み取り

python - トリミング時にPILで画像タイプ情報を保持する