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 使用的更多相关文章

  1. CMake命令/函数汇总(翻译自官方手册)

    查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...

  2. windows下CMake使用图文手册 Part 3

    例子3: 构建动态库(.dll) 静态库(.lib) 采用和例子2一样的文件,但删除了main.cpp E:.               │  CMakeLists.txt │            ...

  3. [转载] CMake Official Tutorial——教程还是官方的好

    CMake官方教程传送门:https://cmake.org/cmake-tutorial/ 以下的内容跟官方教程基本一致,少数地方根据自己的测试有所改动: A Basic Starting Poin ...

  4. Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究

    技术经理说,可以用Cmake当中的add_custom_command,add_custom_target命令来使用. 我初次研究了下,add_custom_command应该用官方文档中说明的第二种 ...

  5. CMake初步(2)

    转自:<你所不知的OSG>第一章:CMake初步(2) http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1229& ...

  6. CMake使用之一

    概述 CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMakeLists.txt,可以控制生成的Makef ...

  7. cmake的命令execute_process

    execute_process(COMMAND <cmd1> [args1...]] [COMMAND <cmd2> [args2...] [...]] [WORKING_DI ...

  8. 旧项目Makefile 迁移CMake的一种方法:include Makefile

    有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦. 因此这里用trick的方法实现了一种i ...

  9. CMake使用总结(转的)+自己的实践心得

    来自https://www.mawenbao.com/note/cmake.html 总结CMake的常用命令,并介绍有用的CMake资源. CMake意为cross-platform make,可用 ...

随机推荐

  1. java基础知识—变量、数据类型和运算符

    1.变量:存储数据的一个基本单元.2.变量的声明和赋值: 1)声明并赋值;数据类型 变量名=值 例如:int prince=10; 2) 声明.赋值分为两步: 数据类型 变量名: 例如:int=pri ...

  2. 最近学习的 Node.js 数组_函数

    数组的排序,用到了箭头函数 let arr=[, , , , , , ]; /* arr.sort(function (n1, n2){ return n1-n2; }); */ // 等价于上面的写 ...

  3. python爬虫基础_scrapy

    其实scrapy想要玩得好,还是需要大量全栈知识的.scrapy 被比喻为爬虫里的django,框架和django类似. 安装: Linux/mac - pip3 install scrapy Win ...

  4. 简单搭个webapp开发框架

    集成开发工具idea 服务器容器Tomcat 第三方依赖管理maven 暂时不集成 (spring+springmvc+mybatis(数据持久层存取)+dubbo+zookeeper(集群调度)) ...

  5. 模块四-shutil模块

    shutil模块 高级的文件处理模块 主要是文件的处理,移动,压缩和解压缩 shutil模块的使用方法: shutil.copyfile()#拷贝文件 shutil.copy()#拷贝文件和权限 sh ...

  6. python基础—列表的使用[]

    names = ['zhangyang','guyun','xiangpeng','xuliangchen']print(names[0])print(names[1:3])#切片print(name ...

  7. tomcat 配置本地路径映射

    在tomcat的server.xml中的<host></host>标签内添加如: <Context path="/photo" reloadable= ...

  8. 使用LSTM-RNN建立股票预测模型

    硕士毕业之前曾经对基于LSTM循环神经网络的股价预测方法进行过小小的研究,趁着最近工作不忙,把其中的一部分内容写下来做以记录. 此次股票价格预测模型仅根据股票的历史数据来建立,不考虑消息面对个股的影响 ...

  9. 获取Xcode工程所有的类名

    有的时候在需求中需要获取工程中所有的类名.例如在获取工程中继承某个类的列表. 核心代码如下: unsigned ; const char **classes = nil; Dl_info info; ...

  10. 2018-2019-2 网络对抗技术 20165228 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165228 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 在使用盗版软件,盗版系统,甚至游戏外挂时,往往会让我们关闭杀毒 ...