# .po to .gmo stuff
FILE(GLOB _pofiles *.po)
FOREACH(_file ${_pofiles})
GET_FILENAME_COMPONENT(_file_we ${_file} NAME_WE)
SET(_out "${_file_we}.gmo")
SET(_in "${_file_we}.po")
ADD_CUSTOM_COMMAND(
OUTPUT ${_out}
COMMAND ${MSGFMT_EXECUTABLE} -o ${_out} ${_in}
DEPENDS ${_in}
)
INSTALL(
FILES ${_out}
DESTINATION share/locale/${_file_we}/LC_MESSAGES/
RENAME gtkqtengine.mo
)
SET(_outputs ${_outputs} ${_out})
ENDFOREACH(_file)
原理就是將 po/ 目錄下的若干翻譯檔案掃描一次,並呼叫 GNU gettext 套件中的 msgfmt 工具進行轉換編譯的動作,這部份的定義於上一層,以下是程式列表:
# Find xgettext
FIND_PROGRAM(
XGETTEXT_PATH
NAMES "xgettext"
PATHS "/usr/bin"
)
IF(${XGETTEXT_PATH} STREQUAL "XGETTEXT_PATH-NOTFOUND")
MESSAGE(STATUS
"xgettext not found. You will not be able to run "
'make extract_messages' in the 'po' directory.")
ELSE(${XGETTEXT_PATH} STREQUAL "XGETTEXT_PATH-NOTFOUND")
MESSAGE(STATUS "Found xgettext: ${XGETTEXT_PATH}")
ENDIF(${XGETTEXT_PATH} STREQUAL "XGETTEXT_PATH-NOTFOUND")
雖然囉唆一點,但是比起 autotools 那些貌似簡短但難以理解的寫法,其實 CMake 的作法既有彈性且清楚。另一個專案 [cmake-modules] 則致力於維護 CMake 的延伸模組,強化 CMake 的 FindPACKAGE 功能,可在 [線上程式碼列表] 中參考其提供的 FindMsgfmt.cmake 與 MacroGeneratePoFiles.cmake (目錄: trunk/Modules/Macros/PoFiles ),與前述程式列表相仿,只是加了簡單的包裝。感謝大大
這樣我的ghunter會更完整
回家再好好的把這個部份搞定