用CMake将visual studio 项目转到linux下编译

在Windows下用VS2010编写并编译项目,然后将项目的结构组织和文件复制到linux下编译, 这样应该会提高工作效率.但Linux下编译需要makefile文件,怎么样快速的进行从VS2010到makefile的转换呢?

在查了大量资料之后总结出下面3种方法:

1.手工写makefile, 这个项目比较大时不实际

2.用Automake,这个使用起来也比较复杂

3.用CMake,个人觉得比Automake简单多了,就选这个了

要用CMake来编译,最重要的一个条件是:要编译的那个目录下要有一个CMakeLists.txt 文件,然后根据这个CMakeLists.txt文件内容,相关联的目录下也必须存在另一个CMakeLists.txt文件,否则会报错.

下面是我的工程模块分布结构(包含CMakeLists.txt分布):

-curious_island     (解决方案)

  -dependencies    (boost库等不太需要自己修改的模块)

    -mysqlwrapped   (mysql包装)

      CMakeLists.txt  (7)

    CMakeLists.txt   (6)

  -LuaPlus     (lua脚本库)

    -src

      +lib

      +lua

      +luac

    CMakeLists.txt   (5)

  -common    (自己写的代码的公共模块)

    CMakeLists.txt   (4)

  -home_server  (home  服务器程序代码)

    CMakeLists.txt   (3)

  -world_server  (world 服务器程序代码)

    CMakeLists.txt   (2)

  CMakeLists.txt     (1)

要让CMake编译整个解决方案,CMakeLists.txt    (1) 简单内容如下:

cmake_minimum_required(VERSION 2.6)   --这条可以不用管,没它用CMake编译时会有一条警号
project(game2033)


add_subdirectory(LuaPlus)
add_subdirectory(dependencies)
add_subdirectory(common)
add_subdirectory(home_server)
add_subdirectory(world_server)

这段内容告诉CMake,我要编译一个解决方案,名字叫game2033,它由以下几个目录组成:

LuaPlus, dependencies, common, home_server, world_server.

 

CMake编译时会打开LuaPlus目录,读取 CMakeLists.txt   (5),如果没发现就报错了.

CMakeLists.txt    (5) 的内容:

cmake_minimum_required(VERSION 2.6)

aux_source_directory(src src_luaplus)
aux_source_directory(src/lib src_luaplus)
aux_source_directory(src/lua src_luaplus)
aux_source_directory(src/luac src_luaplus)
aux_source_directory(. src_luaplus)
add_library(luaplus STATIC ${src_luaplus})

这段内容告诉CMake 把LuaPlus目录下的所有cpp文件,以及 src, src/lib, src/lua, src/luac 子目录下的所有cpp文件,编译成一个名叫luaplus的静态库.

aux_source_directory(src src_luaplus)这个脚本函数的意思是: 把src下的所有cpp文件列表保存在名为src_luaplus变量里.
add_library(luaplus STATIC ${src_luaplus})  的意思是:把变量src_luaplus里保存的所有cpp文件编译成名为luaplus的静态库.

 

home server 和 world server 是可执行程序,它们的CMakeLists.txt的写法以 CMakeLists.txt   (3)为例.

CMakeLists.txt   (3)的内容很简单:

cmake_minimum_required(VERSION 2.6)
aux_source_directory(. src_home)
add_executable(home_server ${src_home})

target_link_libraries(home_server common mysqlwrapped boost_system mysqlclient luaplus)
target_link_libraries(home_server boost_date_time boost_thread)

这段内容告诉CMake 把LuaPlus目录下的所有cpp文件,编译成一个名叫home server的可执行程序,这个程序需要链接以下库文件: luaplus, common, mysqlwrapped, boost_system ... 这些都是一个链接对像名(CMake会去测试选择合适的库文件,比如它会去试着链接 libluaplus.a,有它的规则. ),而不是文件名,但和文件名也有一定的关系,你也可以指定链接文件的全名.

其它几个静态库和可执行程序做法也差不多.只需要了解极少数几个脚本函数,我们就已经能够基本让整个解决方案可以编译出来了,是不是很简单呢...下次有时间写一下稍微高级点的应用.呵呵.

by 老洪 @ 2011-7-20 晚

 

  • 0
    点赞
  • 2
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值