cmake add_custom_command 使用


cmake add_custom_command 使用

 

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

    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對其依賴,因此改成如下形式

    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) ,如果工程大的話,這個命令會增加編譯時間
這里只是簡單做一個筆記,並沒有詳細記錄,有問題請留言,多謝。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM