有些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. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比

    上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...

  2. springmvc 开发流程图

  3. tp5.0 queue 队列操作

    检查是否安装redis(没有请自行百度安装): phpinfo: 配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入: 创建 ...

  4. python(random模块)取10以内的随机数

    上面有个selenium-webdriver循环点击百度搜索结果以及获取新页面的handler文章,随机获取百度搜索结果中不同id的结果,实现代码如下: #coding:utf- import ran ...

  5. python自定义封装logging模块

    #coding:utf-8 import logging class TestLog(object): ''' 封装后的logging ''' def __init__(self , logger = ...

  6. Beta 冲刺(7/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(7/7) 后敬甲(组长) 过去两天完成了哪些任务 ppt制作 视频拍摄 接下来的计划 准备答辩 还剩下哪些 ...

  7. oracle,mysql,sql server三大数据库的事务隔离级别查看方法

    1:mysql的事务隔离级别查看方法 mysql 最简单,执行这条语句就行:select @@tx_isolation  详情: 1.查看当前会话隔离级别 select @@tx_isolation; ...

  8. vue中数据添加完成以后,数据回显

    1.格式 <FormItem label="奖品领取类型:" prop="getType" > <RadioGroup v-model=&qu ...

  9. php 过滤表单提交

    list($addressId,$couponId,$payType,$useIntegral,$mark,$combinationId,$pinkId,$seckill_id,$formId,$ba ...

  10. MQTT控制---subscribe

    连接服务端 客户端向服务端发送SUBSCRIBE报文用于创建一个或多个订阅. 固定报头 报头长度:2 Bytes 1.报头控制类型(0x82) 报文SUBSCRIBE控制报固定报头的第3.2.1.0位 ...