zoukankan      html  css  js  c++  java
  • 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) ,如果工程大的话,这个命令会增加编译时间
    这里只是简单做一个笔记,并没有详细记录,有问题请留言,多谢。


  • 相关阅读:
    Python学习笔记013_正则表达式
    Python学习笔记012_网络_异常
    Python学习笔记011_模块_标准库_第三方库的安装
    Python学习笔记010_迭代器_生成器
    PHP extract() 函数
    php 获取客户端IP
    php array_walk
    PHP array_map()
    PHP call_user_func
    类的更新----MVC设计模式
  • 原文地址:https://www.cnblogs.com/dangerman/p/6529742.html
Copyright © 2011-2022 走看看