2012-08-11 24 views
2

不知道Perl,我無法爲我試驗的新的C++庫配置合成器。 Vim拒絕識別頭文件。這裏是編譯正常程序,但syntastic顯示了它的一個錯誤:Synthetic cpp:致命錯誤「QApplication:沒有這樣的文件或目錄」

#include <QApplication>   <----------- line of error as in title 
#include <QPushButton> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QPushButton hello("Hello world!"); 
    hello.resize(100, 30); 

    hello.show(); 
    return app.exec(); 
} 

這是VIM的語法檢查器子目錄中我cpp.vim裏的文件。注意:我試圖路徑添加到的Qt4在這一點,但沒有用

" in order to also check header files add this to your .vimrc: 
" (this usually creates a .gch file in your source directory) 
" 
" let g:syntastic_cpp_check_header = 1 
" 
" To disable the search of included header files after special 
" libraries like gtk and glib add this line to your .vimrc: 
" 
" let g:syntastic_cpp_no_include_search = 1 
" 
" To enable header files being re-checked on every file write add the 
" following line to your .vimrc. Otherwise the header files are checked only 
" one time on initially loading the file. 
" In order to force syntastic to refresh the header includes simply 
" unlet b:syntastic_cpp_includes. Then the header files are being re-checked 
" on the next file write. 
" 
" let g:syntastic_cpp_auto_refresh_includes = 1 
" 
" Alternatively you can set the buffer local variable b:syntastic_cpp_cflags. 
" If this variable is set for the current buffer no search for additional 
" libraries is done. I.e. set the variable like this: 
" 
" let b:syntastic_cpp_cflags = ' -I/usr/include/libsoup-2.4' 
" 
" Moreover it is possible to add additional compiler options to the syntax 
" checking execution via the variable 'g:syntastic_cpp_compiler_options': 
" 
let g:syntastic_cpp_compiler_options = ' -std=c++0x' 

if exists('loaded_cpp_syntax_checker') 
    finish 
endif 
let loaded_cpp_syntax_checker = 1 

if !executable('g++') 
    finish 
endif 

let s:save_cpo = &cpo 
set cpo&vim 

function! SyntaxCheckers_cpp_GetLocList() 
    let makeprg = 'g++ -fsyntax-only '.shellescape(expand('%')) 
    let errorformat = '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m' 

    if expand('%') =~? '\%(.h\|.hpp\|.hh\)$' 
     if exists('g:syntastic_cpp_check_header') 
      let makeprg = 'g++ -c '.shellescape(expand('%')) 
     else 
      return [] 
     endif 
    endif 

    if exists('g:syntastic_cpp_compiler_options') 
     let makeprg .= g:syntastic_cpp_compiler_options 
    endif 

    if !exists('b:syntastic_cpp_cflags') 
     if !exists('g:syntastic_cpp_no_include_search') || 
        \ g:syntastic_cpp_no_include_search != 1 
      if exists('g:syntastic_cpp_auto_refresh_includes') && 
         \ g:syntastic_cpp_auto_refresh_includes != 0 
       let makeprg .= syntastic#c#SearchHeaders() 
      else 
       if !exists('b:syntastic_cpp_includes') 
        let b:syntastic_cpp_includes = syntastic#c#SearchHeaders() 
       endif 
       let makeprg .= b:syntastic_cpp_includes 
      endif 
     endif 
    else 
     let makeprg .= b:syntastic_cpp_cflags 
    endif 

    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat }) 
endfunction 
let &cpo = s:save_cpo 
unlet s:save_cpo 
let s:default_includes = [ '.', '..', 'include', 'includes' ] 
let s:default_includes = [ '.', '..', 'include', 'includes','../include', '../includes' ] 


function! s:GetIncludeDirs() 

    let include_dirs = s:default_includes 
endfunction 
" vim: set et sts=4 sw=4: 

和syntastic相關行從我的.gvimrc裏:

"===============================SYNTASTICSETTINGS================================================ 
"set statusline+=%#warningmsg# 
"set statusline+=%{SyntasticStatuslineFlag()} 
"set statusline+=%* 
let g:syntastic_cpp_include_dirs = ['../include','include'] 
let g:syntastic_cpp_check_header = 1 
let g:syntastic_enable_signs=1 
let g:syntastic_quiet_warnings=1 
set wildchar=<Tab> wildmenu wildmode=full 

我希望學習的syntastic運作幫助和語法檢查器,因爲我懷疑這個問題每當我練習一個不同的開發工具時會重複出現。謝謝

+0

您在cpp.vim中定義了'g:syntastic_cpp_include_dirs'(你不應該這樣做),然後在'.gvimrc'中重新定義相同的變量。我不是QT的專家,但使用'g:syntastic_cpp_include_dirs'應該可以工作。你用什麼命令行來編譯你的文件可以工作? – kongo2002 2012-08-11 19:00:01

+0

感謝您的提示。 。我使用cmake構建它,幾乎可以自動檢測包。我試圖找出個別文件。 PS>我已經從我的cpp.vim文件中刪除了g:syntastic_cpp_include_dirs – Maelstorm 2012-08-11 20:39:03

回答

3

您是否嘗試過設置syntastic_cpp_include_dirs/usr/include/qt4/QtGui?它看起來應該給出標題所在的目錄。

+0

是的,我那樣做了..嘗試了不同的變化。不工作 – Maelstorm 2012-08-11 15:19:17

+0

謝謝!有沒有辦法將'/ usr/include'的所有子目錄添加到'syntastic_cpp_include_dirs'? – WhyNotHugo 2014-09-28 20:10:41

相關問題