Cmake 使用和交叉编译配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Cmake能做什么

CMake 是个跨平台的自动化建构系统,它用组态档控制建构过程的方式和 Unix 的 Make 相似,
是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准
的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一
般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的
软件,CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建
构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建
构(二进档在别的目录里)

Cmake 基本使用

cmake_minimum_required(VERSION 2.6)
project(hello)

# 添加头文件路径
include_directories(include/)

# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

文件结构

.
├── build
├── CMakeLists.txt
├── include
├── main.cpp
└── src

注: build 目录不是必须的,主要是因为Cmake生成Makefile时会产生一下临时文件,所以使用了(out-of-place),这样方便管理文件,建议使用(out-of-place)方式,除非你不介意工程目录中多临时文件。

编译时 进入build目录,执行命令(下同)

cmake .. && make

Cmake添加静态库模块

根目录下的 CmakeLists.txt

project(hello)

# 添加头文件路径
include_directories(include/ lib/)
# 添加模块
add_subdirectory(lib)
# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 设置链接
link_libraries(sub)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

lib模块下的CmakeLists.txt

cmake_minimum_required(VERSION 2.6)

project(sub)

# SHARED表示生产动态库,STATIC表示生成静态库,默认生成静态库
add_library(sub SHARED sub.cpp)

文件结构

├── build
├── CMakeLists.txt
├── include
│   └── add.h
├── lib
│   ├── CMakeLists.txt
│   ├── sub.cpp
│   └── sub.h
├── main.cpp
└── src
    └── add.cpp

进行交叉编译

cmake_minimum_required(VERSION 2.8)
project(hello)

if(${CROSS_COMPILE})
    set(CMAKE_C_COMPILER arm-linux-gcc)
    set(CMAKE_CXX_COMPILER arm-linux-g++)
endif()
# 添加头文件路径
include_directories(include/ lib/)
# 添加模块
add_subdirectory(lib)
# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 设置链接
link_libraries(sub)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

进入build目录,执行

cmake .. -DCROSS_COMPILE=true

即可生成支持arm-linux编译器的Makefile文件

注: 想要重新生成不带交叉编译的版本,只需删除build下的 CmakeCache.txt,或者 将true 改为false即可
在2.6的版本中Cmake 的if命令不支持true和false,改为1和0即可

最后,相关工程以防止到 码云上了 https://git.oschina.net/hivebc/cmake_hello

工欲善其事必先利其器 不能只做一个码农,多了解其背后原理更为重要。

转载于:https://my.oschina.net/albert2011/blog/880021

你可能感兴趣的:(Cmake 使用和交叉编译配置)