今天整理编译工程,想在编译工程前面用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) ,若是工程大的话,这个命令会增长编译时间这里只是简单作一个笔记,并无详细记录,有问题请留言,多谢。