cmake 交叉编译工程例子

Android studio NDK 中推荐用 cmake 工具构建 native 工程。 我在写 NDK 库的时候顺便学了 cmake 语法。

cmake 下载网址:

https://cmake.org/download/

cmake 允许开发者编写 CMakeLists.txt 文件来控制编译流程,再根据目标板平台的编译工具链自动生成 Makefile 。如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。 

我在开发过程中使用到 Android 和 arm Linux 开发环境。特别是移植和测试某些库的时候, 在Android 环境要写 Android.mk , 在 Linux 环境要Ubuntu 和 arm Linux 的 makefile。 用  CMakeLists.txt 省去了编写多个 makefile 

 

下面给出个交叉编译的 CmakeLists.txt 范例:

cmake_minimum_required(VERSION 3.4.1)
# 设置工程名称
project(test project)
# 设置目标文件名
set(TAG test)

# 交叉工具链,必须配置
set(CMAKE_SYSTEM_NAME Linux)
# 指定交叉编译环境安装目录
# set(CMAKE_FIND_ROOT_PATH  /opt/hisi-linux/x86-arm/arm-hisiv300-linux)

# 设置编译器和编译参数
set(CMAKE_C_COMPILER /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
set(CMAKE_CXX_COMPILER /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-g++)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DLINUX)


# 编译模式 CMAKE_BUILD_TYPE 枚举如: Debug Release RelWithDebInfo MinSizeRel
set(CMAKE_BUILD_TYPE "Debug")
# set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_C_FLAGS_DEBUG "$ENV{CFLAGS} -O0 -Wall -g -ggdb -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -ffunction-sections")
set(CMAKE_C_FLAGS_RELEASE "$ENV{CFLAGS} -O2 -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Wall")

# 设置输出目录
if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
message("build Release")
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin/release)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib/release)
elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin/debug)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib/debug)
message("build Debug")
else()
message("build default")
endif()

#################################################################################################
# 添加指定目录的源文件
aux_source_directory(. SRC_LIST1)
aux_source_directory(./subdir1 SRC_LIST2)
set(SRC_LIST ${SRC_LIST1} ${SRC_LIST2})
message("SRC_LIST ${SRC_LIST}") # 打印变量

# 添加头文件目录
set(INC_PATH ${PROJECT_SOURCE_DIR}
			 ${PROJECT_SOURCE_DIR}/avutil)
include_directories(${INC_PATH})

# 添加链接库的路径
set(LINK_PATH ${PROJECT_SOURCE_DIR}/../lib)
link_directories(${LINK_PATH})

# 添加库
set(usrlibs
	# 链接库列表
	pthread
	m)

# 编译项目
# add_executable( ${TAG }
#                 ${SRC_LIST})
# 编译库
# add_library(${TAG }
#        SHARED # 编译库的类型 SHARED STATIC
#        ${SRC_LIST})
add_library(${TAG}
        STATIC # 编译库的类型 SHARED STATIC
        ${SRC_LIST})
# 编译执行文件的链接库, 放在 add_library add_executable 后面
target_link_libraries(${TAG} ${usrlibs})

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值