2010-03-31 54 views
4

我正在嘗試在Xcode中使用Doxygen。我跟着Apple tutorial。幾次失誤後,我建立了項目並生成了文檔。我發現如果你保存了Doxygen的doxygen.config,並在目錄名稱中使用空格「」,那麼你將遇到問題和其他問題。如何在Xcode中使用Doxygen?

但還有最後一個問題:

./search/search.png 
./tab_b.gif 
./tab_l.gif 
./tab_r.gif 
./tabs.css 
/Developer/usr/bin/docsetutil index com.mycompany.DoxygenExample.docset 
2010-03-31 12:30:53.847 docsetutil[46338:807] Error converting XML to CoreData: Error Domain=NSXMLParserErrorDomain Code=76 UserInfo=0x1247d0 "Line 8: Opening and ending tag mismatch: Subnodes line 0 and Node 
" 
Failed to create docset indexer object 
make: *** [docset] Error 1 
load documentation set with path "/Users/WB/Library/Developer/Shared/Documentation/DocSets/" 

我不知道是什麼問題?任何想法?

我正在使用Core Data - sqlite。

回答

0

我使用上述腳本的擴展版本,但基於相同的原則。雖然這一次我的腳本失敗了,但其他項目的一切正常。 docset的生成工作正常,但make命令會產生以下錯誤。

x ./search/search_r.png 
2010-07-26 17:36:01.815 docsetutil[8441:903] 
Error converting XML to CoreData: 
Error Domain=NSXMLParserErrorDomain 
Code=76 
UserInfo=0x1006105e0 
"Line 8: Opening and ending tag mismatch: Subnodes line 0 and Node" 
Failed to create docset indexer object 
make: *** [docset] Error 1 

我使用的make命令是:make --silent -C "$DOCSET_OUTPUT/html" install。 爲了提高可讀性,我在錯誤消息中添加了換行符。

4

解析器告訴你XML格式不正確,但是通常會顯示錯誤,因爲在運行docsetutil之前沒有生成任何內容。

首先應該查看控制檯輸出的許多行並查找警告,可能是在那裏。還要查找您生成的文檔集,然後右鍵單擊>顯示內容。如果你沒有看到許多帶有文檔的html文件,那麼同樣的事情:你在生成文檔方面失敗了,而docsetutil無能爲力。順便說一下,它是誰使用CoreData的docsetutil,如果你在你的項目中使用它並不重要。

我不明白蘋果爲什麼不提供更緊密集成的doxygen-like工具。或者比Crustify更好的代碼格式化程序。只要拿這些該死的工具,稍微改進一下。哎呀!

1

Doxygen生成的Nodes.xml存在一個已知的錯誤。在此引用https://bugzilla.gnome.org/show_bug.cgi?id=671591,應在下一版本doxygen的(郵政V 1.8.0)進行修正:

在Nodes.xml的盡頭有一個額外的

的-silence選項的解決方法來抑制錯誤,但此參數不允許dosetgeneration正常工作。

$DOXYGEN_PATH $TEMP_DIR/doxygen.config 

make -C $TEMP_DIR/DoxygenDocs.docset/html install 

插入下面的代碼

注:該腳本在$ TEMP_DIR而不是SOURCE_ROOT作爲AppleScript的

$DOXYGEN_PATH $TEMP_DIR/doxygen.config 

# make will invoke docsetutil. Take a look at the Makefile to see how this is done. 


LINE=`xmllint --c14n $TEMP_DIR/DoxygenDocs.docset/html/Nodes.xml 2>&1 | awk 'NR == 1 {print $1}' | cut -d':' -f 2` 

ECHO $LINE 

if [ $LINE -gt 0 ] 
then 
echo "XML Cleaning " 
sed -i.bak $LINE'd' $TEMP_DIR/DoxygenDocs.docset/html/Nodes.xml 

fi 

make -C $TEMP_DIR/DoxygenDocs.docset/html install 

注:AWK和sed當然可以在一行結合。