cmake add_custom_command 使用
2017-03-10 11:26
465 查看
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) ,如果工程大的话,这个命令会增加编译时间
这里只是简单做一个笔记,并没有详细记录,有问题请留言,多谢。
相关文章推荐
- cmake文档中文翻译-add_custom_command
- Vi and Vim Autocommand: 3 Steps to Add Custom Header To Your File Automatically
- CMake命令之add_custom_comand 和 add_custom_target
- 关于loadrunner使用web_add_header添加HTTP信息头(比如Content-Type,token等)和使用web_custom_request()提交json数据
- Gridview之RowCommand,ButtonField[add buttons and use the RowCommand event to add custom functionality to the control]
- 用几句话说一说CMake add_dependencies & target_link_libraries的使用区别
- svn服务器搭建和使用:Custom action GenerateSSLKey failed: Command terminated with non-zero exit code
- cmake的四个命令:add_compile_options()add_definitions()target_compile_definitions()build_command()
- CMake命令之add_custom_comand 和 add_custom_target
- 关于loadrunner使用web_add_header添加HTTP信息头(比如Content-Type,token等)和使用web_custom_request()提交json数据
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(一)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(一)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(三)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- svn服务器搭建和使用:Custom action GenerateSSLKey failed: Command terminated with non-zero exit code
- LLVM : Unknown CMake command "add_llvm_loadable_module".
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(三)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(二)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- 在Visual Studio.NET中使用自定义插件最大化您的生产力(一)Custom Add-Ins Help You Maximize the Productivity of Visual Studio .NET
- Vi and Vim Autocommand: 3 Steps to Add Custom Header To Your File Automatically
- svn服务器搭建和使用:Custom action GenerateSSLKey failed: Command terminated with non-zero exit code