有些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这一步。。

旧项目Makefile 迁移CMake的一种方法:include Makefile的更多相关文章

  1. Intellij IDEA实现SpringBoot项目多端口启动的两种方法

    有时候使用springboot项目时遇到这样一种情况,用一个项目需要复制很多遍进行测试,除了端口号不同以外,没有任何不同.遇到这种情况怎么办呢?这时候可以使用Intellij IDEA解决 前言 有时 ...

  2. linux svn迁移备份的三种方法

    原文:http://www.iitshare.com/linux-svn-migration.html svn备份方式对比分析 一般采用三种方式: 1.svnadmin dump 2.svnadmin ...

  3. eclipse 项目引入第三方jar包 3种方法

    我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通操作 ...

  4. eclipse中将项目打包成jar的两种方法,及其问题与解决方法

    第一种:利用eclipse中自带的export功能 第一种方法分两种情况先来看第一种情况:没有引用外部jar的项目打包 步骤一:右键点击项目选择导出(export),选择java>jar文件(不 ...

  5. vue后台管理项目中菜单栏切换的三种方法

    第一种方法:vue嵌套路由(二) <el-menu :default-active="defaultActive" style="min-height: 100%; ...

  6. java web 项目中获取当前路径的几种方法

    1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到工程名:req ...

  7. SQL Server中迁移数据的几种方法

    1.通过工具"DTS"的设计器进行导入或者导出 DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不 多,如果只是进行SQL Server数据库中部分表的 ...

  8. QT下实现对Linux Shell调用的几种方法

    使用QProcess QThread ============================================ #include <QProcess>int main(){ ...

  9. Qt产生随机数(两种方法)

    第一种方法 #include <QTime> QTime time; time= QTime::currentTime(); qsrand(time.msec()+time.second( ...

随机推荐

  1. AXI_DMA IP学习

    参考:PG201  AXI DMA v7.1    AXI IP核 功能:一旦处理器配置好传输方式之后,DMA可以自己完成内存数据的搬进或者搬出,而不需要处理器的介入.如果使用方法得当,DMA可以显著 ...

  2. expect 批量自动部署ssh 免密登陆 之 二

    #!/usr/bin/expect -f ########################################## hutu #Push the id.pas.pub public key ...

  3. Go语言--基础语法笔记

    ### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...

  4. [Linux]信号集和sigprocmask信号屏蔽函数

    一.概述 系统提供这样一种能力,就是创建一个信号集,然后传递给信号屏蔽函数,从而屏蔽向该进程发送的信号. 有一点需要注意的是,不能屏蔽SIGKILL和SIGSTOP信号. 信号集是sigset_t类型 ...

  5. (转)理解maven命令package、install、deploy的联系与区别

    我们在用maven构建java项目时,最常用的打包命令有mvn package.mvn install.deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命 ...

  6. SVG初尝试(二)

    基本图形 rect(矩形).circle.ellipse(椭圆).line(直线).polyline(折线).polygon(多边形).path(可以绘制任意图形) rect x,y定义矩形坐标,矩形 ...

  7. 操作Excel

    1.成面积计算(比如一块区域的数据统一除1000) (1).选一个空格单元格输入公式 回车 (2).复制改单元格 >选中所有要计算的面积 >右键 >选择性粘贴 >选择数值 &g ...

  8. 当运行docker run -i -t ubuntu /bin/bash时,提示报错Error response from daemon: EOF?

    可能是下载过程中出现错误,重新执行docker pull ubuntu,在执行docker run -i -t ubuntu /bin/bash就OK了.

  9. Cesium 中两种添加 model 方法的区别

    概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...

  10. 抓取某东的TT购买记录分析TT购买趋势

    最近学习了一些爬虫技术,想做个小项目检验下自己的学习成果,在逛某东的时候,突然给我推荐一个TT的产品,点击进去浏览一番之后就产生了抓取TT产品,然后进行数据分析,看下那个品牌的TT卖得最好. 本文通过 ...