cmake交叉编译个人工程模板

cmake交叉编译个人工程模板


初衷

由于目前写的一些c/c++程序需要考虑跨平台,并且我目前接触的主要是cmake,并且比较常见交叉编译方式,所以这里总结了一个个人比较常用的交叉编译模板,后续一些工程可以拿来直接修改使用,算是比较方便,防止长时间不接触cmake又忘记了。

此外,建议CSDN的markdown支持一下cmake的高亮!

1、主目录模板1

# 指定最小需要的cmake版本
cmake_minimum_required(VERSION 3.0)
# 工程名,一般使用大的文件夹的名字
project(CROSS_TEST)

# 设置交叉编译工具链
set(CMAKE_C_COMPILER /usr/local/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc)

# 设置c_flags
set(CMAKE_C_FLAGS "--sysroot=/usr/local/android-ndk-r10/platforms/android-18/arch-arm/ -pie -pipe -Os")

# 设置头文件位置
include_directories(
  /usr/local/android-ndk-r10/platforms/android-18/arch-arm/usr/include/
  ${PROJECT_SOURCE_DIR}
  ${PROJECT_SOURCE_DIR}/include/
  ${PROJECT_SOURCE_DIR}/include/cjson/
  ${PROJECT_SOURCE_DIR}/include/curl/
  ${PROJECT_SOURCE_DIR}/include/json/
  ${PROJECT_SOURCE_DIR}/include/libxml/
  ${PROJECT_SOURCE_DIR}/include/lua/
  ${PROJECT_SOURCE_DIR}/include/openssl/
  ${PROJECT_SOURCE_DIR}/include/pcap/
)
# 设置链接动态库或者静态库的位置
link_directories(
  /usr/local/android-ndk-r10/platforms/android-18/arch-arm/usr/lib/
  ${PROJECT_SOURCE_DIR}/lib
)

# 设置源码目录
aux_source_directory(. DIR_CROSS_TEST)
# 设置可执行程序名
add_executable(ky_stb ${DIR_CROSS_TEST})
# 设置链接的库
target_link_libraries(test log dl m c crypto ssl xml2 curl pcap cutils cjson)
# 指定可执行程序的安装位置,即make install后安装执行程序的位置
install(TARGETS test RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/../bin)

2、主目录模板2(有支持子目录的功能)

cmake_minimum_required(VERSION 2.8)
project(21CN_client)
set(CMAKE_INSTALL_PREFIX /home/zy/work_dir/21CN_device_management_client/bin)

set(CMAKE_C_COMPILER /opt/mstar_glibc_host/bin/arm-mstar-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /opt/mstar_glibc_host/bin/arm-mstar-linux-gnueabihf-g++)

set(CMAKE_SYSTEM_NAME Linux)

add_subdirectory(https_client_request_methods)
add_subdirectory(frame_queue)
add_subdirectory(media_processing)
add_subdirectory(commapi)

include_directories(
    "${PROJECT_SOURCE_DIR}/media_processing"
    "${PROJECT_SOURCE_DIR}/https_client_request_methods"
    "${PROJECT_SOURCE_DIR}/frame_queue"
    "${PROJECT_SOURCE_DIR}/commapi"
    "/home/zy/009/mijia_camera_common/mijia_camera_v4-3.4.9_0215-hid_6000/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include"
    "/home/zy/009/mijia_camera_common/miio_source/miio_util/include"
)

link_directories(
    "/home/zy/009/mijia_camera_common/mijia_camera_v4-3.4.9_0215-hid_6000/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib"
    "${PROJECT_SOURCE_DIR}/media_processing"
    "${PROJECT_SOURCE_DIR}/https_client_request_methods"
    "${PROJECT_SOURCE_DIR}/frame_queue"
    "${PROJECT_SOURCE_DIR}/commapi"
    "${PROJECT_SOURCE_DIR}/../lib"
)

aux_source_directory(. DIR_21CN_CLIENT)
add_executable(client ${DIR_21CN_CLIENT})
target_link_libraries(client rt m pthread dl cares ssl crypto z ev shbfev shbf curl HomcaServ frame_queue media_processing https_client_request_methods commapi p2pioapi pj-arm-none-linux-gnu pjlib-util-arm-none-linux-gnu pjnath-arm-none-linux-gnu)
install(TARGETS client DESTINATION .)

3、子目录模板

以静态库方式提供给主目录,方便模块化编译和开发,写完模块后直接编译成静态库给其它项目使用也可以。

set(CMAKE_C_COMPILER /opt/mstar_glibc_host/bin/arm-linux-gcc)
set(CMAKE_CXX_COMPILER /opt/mstar_glibc_host/bin/arm-mstar-linux--g++)

include_directories(
    "."
    "../"
    "../frame_queue"
    "../https_client_request_methods"
    "../media_processing"
    "/home/zy/009/mijia_camera_common/mijia_camera_v4-3.4.9_0215-hid_6000/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include"
    "/home/zy/009/mijia_camera_common/miio_source/miio_util/include"
)

link_directories(
    "/home/zy/009/mijia_camera_common/mijia_camera_v4-3.4.9_0215-hid_6000/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib"
    "../frame_queue"
    "../media_processing"
    "../https_client_request_methods"
)

aux_source_directory(. DIR_COMMAPI)
add_library(commapi STATIC ${DIR_COMMAPI})
target_link_libraries(commapi https_client_request_methods media_processing frame_queue)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值