有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦。

因此这里用trick的方法实现了一种include makefile的方法。

# trick to include raw makefile
FILE(WRITE ${CMAKE_BINARY_DIR}/.cmake_dummy.c "int main(void){return 0;}\n") function(INCLUDE_MAKEFILE tg mkfile)
STRING(CONCAT OTPT ${tg} .out)
ADD_CUSTOM_COMMAND(
OUTPUT ${OTPT}
COMMAND ${CMAKE_COMMAND} -E touch ${OTPT}
COMMAND ${CMAKE_COMMAND} -E echo
'include ${mkfile}'
>> ${CMAKE_SOURCE_DIR}/Makefile
)
ADD_EXECUTABLE(${tg} ${CMAKE_BINARY_DIR}/.cmake_dummy.c ${OTPT})
endfunction() # remember to execute `make ${target}` first to active makefile including
# for example : make rocksdbjni
INCLUDE_MAKEFILE(rocksdbjni ${CMAKE_SOURCE_DIR}/rocksdbjni.mk)

大致就是创建一个target用于执行将 include makefile 的语句追加到Makefile 。比较麻烦的是目前 include要手动激活,比如上述示例,cmake . 完后需要 make rocksdbjni 来激活这个target对应的include。当然实在不行也可以考虑加一个execute_process到最后触发一个后台延迟去代码激活的方法来省去还要make target这一步。。

最新文章

  1. Js 类定义的几种方式
  2. iOS开发工具——网络封包分析工具Charles
  3. MySQL与SQL比较有那些区别呢
  4. 【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发
  5. html里的table如何在表格内部保留表格横线的同时去掉表格里的竖线
  6. sql对日期的处理,一个存储过程示例
  7. Inno Setup技巧[界面]添加和自定义左下角标签
  8. Java 容器在实际项目中的应用
  9. Flex和Servlet结合上传文件报错(一)
  10. PHP全栈学习笔记18
  11. 【大数据技术】HBase介绍
  12. idea使用破解版mybatis plugin插件失败,idea打不开的解决方案
  13. URL中带加号的处理
  14. (转)Thread的中断机制(interrupt)
  15. vue中使用promise.all发送多个请求
  16. C#中,Json的序列化和反序列化的几种方式总结
  17. js-学习笔记-Thunk函数
  18. nginx高性能webserver具体解释(1)--安装nginx
  19. python 判断字典是否为空
  20. Jenkins Gitlab持续集成打包平台搭建

热门文章

  1. L1-Day13
  2. Win 10 系统下研华采集卡Advantech Navi SDK虚拟demo设备安装方法
  3. nginx实现https的配置文件
  4. ASP.NET Core + Vue.js 开发
  5. Nginx负载-nginx转发到Swoole服务器(nginx配置文件变更)
  6. VMware14虚拟机上使用Ubuntu16.04遇到的各种问题(不定期更新)
  7. jQuery的deferred对象解析
  8. kettle的job定时任务的一个小问题
  9. java 静态资源访问详解
  10. OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy