linux下cmake编译C++工程之总结篇

昨天正式把项目编译完成,经历了一周的摸索和折磨后,最后也想:oh,it's so easy!

但是过程确实困难的,因为cmake官方只有API的解释,而且解释的不是很清楚。

一般项目都是狠复杂的层级关系


这种如何来写cmake呢?

首先要知道一个很重要的东西,cmake是一定要从顶级目录开始,才能继承目录,比如直接在project1目录里用../lib是无效的,因为cmake并不知道;

而如果在project下建立cmakelists.txt 然后add_subdir(project1),project1里就可以这么用了。

现在就写一下简单的实现:

首先是project下的cmakeLists.txt:

PROJECT(SERVER)

cmake_minimum_required(VERSION 2.8)

add_definitions(-std=c++11)

SET(ENV{Platform} x64)
SET(ENV{Configuration} Debug)
SET(CompilerSetting "clang")
SET(LIBRARY_OUTPUT_PATH lib/$ENV{Platform}/$ENV{Configuration})
SET(EXECUTABLE_OUTPUT_PATH	bin/$ENV{Platform}/$ENV{Configuration})
SET(LINK_LIBPATH Lib/$ENV{Platform}/$ENV{Configuration})

add_subdirectory(project1)

add_subdirectory这句会自动迭代搜索project1下的cmakelists.txt并解析执行。所以需要在project1下也建立cmakelists.txt:

set(ProjectName project1)
PROJECT(${ProjectName})

INCLUDE_DIRECTORIES(../include)

AUX_SOURCE_DIRECTORY(. DIR_SRCS)

SET(CMAKE_CXX_COMPILER ${CompilerSetting})

IF ($ENV{Configuration} STREQUAL Debug)
	SET(CMAKE_BUILD_TYPE Debug)
ELSE()
	SET(CMAKE_BUILD_TYPE Release)
ENDIF()

LINK_DIRECTORIES(${LINK_LIBPATH})

IF ($ENV{Configuration} STREQUAL Debug)
	add_definitions(-g -lpthread)	
	SET(CMAKE_CXX_FLAGS_DEBU "$ENV{CXXFLAGS} -O0 -Wall")
ELSE()
	SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
ENDIF()

ADD_EXECUTABLE(${ProjectName} ${DIR_SRCS})	
TARGET_LINK_LIBRARIES ( ${ProjectName} pthread)

需要包含什么目录就写 INCLUDE_DIRECTORIES,如果需要依赖lib就需要写 TARGET_LINK_LIBRARIES。另外就是用了父cmake预定义的一些变量,这样就可以很容易地更改配置。

然后再project目录下 执行cmake .

make

就可以生成project1.exe了。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值