cmake add_custom_command 使用

cmake add_custom_command 使用

 

今天整理編譯工程,想在編譯工程前面用tolua生成c文件, 使用命令add_custom_command後,附加的命令並不執行,以下:lua

    add_custom_command (OUTPUT ${COMPLETE_NAME_C}
PRE_BUILD
COMMAND ${COMMAND_TOLUA} -o ${COMPLETE_NAME_C} ${API_PKG_FILE}
DEPENDS ${COMMAND_TOLUA} ${API_PKG_FILE}
COMMENT "Generating tolua++ API binding on the fly for ${COMPLETE_NAME_C}")

 網上查了一下,這個命令直接寫出來是不會被執行的,他須要target對其依賴,所以改爲以下形式spa

    add_custom_command (TARGET myproject
PRE_BUILD
COMMAND ${COMMAND_TOLUA} -o ${COMPLETE_NAME_C} ${API_PKG_FILE}
DEPENDS ${COMMAND_TOLUA} ${API_PKG_FILE}
COMMENT "Generating tolua++ API binding on the fly for ${COMPLETE_NAME_C}")
這樣,編譯前,文件是能夠生成了,但還有問題,這條命令只能寫到add_library(myproject ...) 後面,不然TARGET myproject找不到。但若是寫到後面的話,
文件是生成了,沒有辦法加到add_library裏面了。
因而又看了一遍add_custom_command這個命令的文檔,直接用OUTPUT就能夠解決,改爲以下形式
file(GLOB_RECURSE LUA_PKG_FILES *.pkg)
foreach (API_PKG_FILE ${LUA_PKG_FILES})
#各類路徑處理略
add_custom_command (OUTPUT ${COMPLETE_NAME_C}
PRE_BUILD
COMMAND ${COMMAND_TOLUA} -o ${COMPLETE_NAME_C} ${API_PKG_FILE}
DEPENDS ${COMMAND_TOLUA} ${API_PKG_FILE}
COMMENT "Generating tolua++ API binding on the fly for ${COMPLETE_NAME_C}")

list (APPEND TOLUA_C_FILES ${COMPLETE_NAME_C})
endforeach ()
add_library(myproject ${TOLUA_C_FILES} ...)
如此工程就依賴這個command,command在編譯前會先被執行。
總結:add_custom_command命令寫到文件裏後並不直接執行,須要你的target或者其餘東西依賴,有了依賴關係纔會被執行。
  
  
  
  
因爲個人工程比較小,因此能夠用file(GLOB_RECURSE) ,若是工程大的話,這個命令會增長編譯時間
這裏只是簡單作一個筆記,並無詳細記錄,有問題請留言,多謝。
相關文章
相關標籤/搜索