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 使用的更多相关文章
- CMake命令/函数汇总(翻译自官方手册)
查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...
- windows下CMake使用图文手册 Part 3
例子3: 构建动态库(.dll) 静态库(.lib) 采用和例子2一样的文件,但删除了main.cpp E:. │ CMakeLists.txt │ ...
- [转载] CMake Official Tutorial——教程还是官方的好
CMake官方教程传送门:https://cmake.org/cmake-tutorial/ 以下的内容跟官方教程基本一致,少数地方根据自己的测试有所改动: A Basic Starting Poin ...
- Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究
技术经理说,可以用Cmake当中的add_custom_command,add_custom_target命令来使用. 我初次研究了下,add_custom_command应该用官方文档中说明的第二种 ...
- CMake初步(2)
转自:<你所不知的OSG>第一章:CMake初步(2) http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1229& ...
- CMake使用之一
概述 CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMakeLists.txt,可以控制生成的Makef ...
- cmake的命令execute_process
execute_process(COMMAND <cmd1> [args1...]] [COMMAND <cmd2> [args2...] [...]] [WORKING_DI ...
- 旧项目Makefile 迁移CMake的一种方法:include Makefile
有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦. 因此这里用trick的方法实现了一种i ...
- CMake使用总结(转的)+自己的实践心得
来自https://www.mawenbao.com/note/cmake.html 总结CMake的常用命令,并介绍有用的CMake资源. CMake意为cross-platform make,可用 ...
随机推荐
- [git]入门-工作区、暂存区、版本库
转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256 ...
- ASP.NET Core2.2 IExceptionFilter
用vs2017建立一个ASP.NET Core Web应用程序并选择MVC框架,自动生成了 Startup的类,并配置了错误处理方式: if (env.IsDevelopment()) { app.U ...
- Matlab小波工具箱的使用2
Matlab小波工具箱的使用2 (2011-11-11 09:32:57) 转载▼ http://blog.sina.com.cn/s/blog_6163bdeb0102dw7a.html#cmt_5 ...
- npm -g -D -s的区别
npm install module-name 全局安装 npm install module-name -D 即 npm install module-name -save-dev 保存到devD ...
- 原型图 ER 8.0的注册码
axuer8.0注册码Licensee:米 业成 (STUDENT)Key:nFmqBBvEqdvbiUjy8NZiyWiRSg3yO+PtZ8c9wdwxWse4WprphvSu9sohAdpNnJ ...
- 局域网主机A向主机B发送ip数据报的过程
主机A首先查找其ARP高速缓存内的映射表中是否有主机B的IP地址,如果有,则查找出其对应的硬件地址,并将该硬件地址写入MAC帧,通过局域网将该MAC帧发送给主机B.如果ARP高速缓存内没有主机B的IP ...
- 将一个float型转化为内存存储格式的步骤
将一个float型转化为内存存储格式的步骤为: (1)先将这个实数的绝对值化为二进制格式. (2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边. (3)从小数点右边 ...
- Vue-cli里面引用stylus遇到的问题总结
1.stylus的调用 在vue-cli中用到stylus样式处理器的时候一定要引用两个对应的报stylus stylus-loader 命令:cnpm install stylus stylus- ...
- datafactory5.6向mysql5.7添加大量测试数据
1.下载安装datafactory5.6 2.下载安装mysql5.7,并创建数据库guest_test和表sign_event 3.下载安装odbc5.3 4.打开datafactory配置数据源, ...
- arcgis 添加经纬度坐标点
ArcGIS 10.2导入X.Y坐标(经度.纬度),生成Shapefile点数据 参考博客很完整 基站-纬度-经度 1---- 2----X 经度 Y 纬度 Z高程(没有) 3---一开始只定 ...