Linux&Windows下使用CMake编译多个C文件

linux模板
新建build.sh文件

set -e


export TOOL_CHAIN=/home/ppf/project/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
GCC_COMPILER=aarch64-linux

export LD_LIBRARY_PATH=${TOOL_CHAIN}/lib64:$LD_LIBRARY_PATH
export CC=${GCC_COMPILER}-gcc
export CXX=${GCC_COMPILER}-g++

ROOT_PWD=$( cd "$( dirname "$0" )" && cd -P "$( dirname "$SOURCE" )" && pwd )

# build
BUILD_DIR=${ROOT_PWD}/build

if [[ ! -d "${BUILD_DIR}" ]]; then
  mkdir -p ${BUILD_DIR}
fi

cd ${BUILD_DIR}
cmake .. -DCMAKE_SYSTEM_NAME=Linux 
make -j4
#make install
cd -

新建CMakeLists.txt文件

cmake_minimum_required(VERSION 3.4.1)
project(hello)


aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)

set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(hello ${SRC_SUB} ${SRC_CUR})

如果使用第三方库需要加上以下代码

cmake_minimum_required(VERSION 3.4.1)
project(hello)


aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")

SET(OpenCV_DIR   /home/fmsh/opencv-4.5.5/opencv/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)

set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(test ${SRC_SUB} ${SRC_CUR})
#用于指定链接到目标可执行文件或库的各种库文件
target_link_libraries(test
opencv_world
)

扩展进阶

cmake_minimum_required(VERSION 3.4.1)

project(rknn_yolov5_demo_c++)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#  set(CMAKE_CXX_FLAGS "-pthread")

# skip 3rd-party lib dependencies
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")

# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})

set(CMAKE_SKIP_INSTALL_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#----------------------------------


include_directories(${RKNN_API_PATH}/include)
include_directories(${CMAKE_SOURCE_DIR}/include/3rdparty)
include_directories(${RGA_PATH}/include)

set(LIB_ARCH aarch64)


# mpp
set(MPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/mpp)
set(MPP_LIBS ${MPP_PATH}/${CMAKE_SYSTEM_NAME}/${LIB_ARCH}/librockchip_mpp.so)
include_directories(${MPP_PATH}/include)

#------------------------------------------------
# rknn api
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK3588/${CMAKE_SYSTEM_NAME}/librknn_api)
set(RKNN_RT_LIB ${CMAKE_SOURCE_DIR}/include/librknnrt.so)
include_directories(${CMAKE_SOURCE_DIR}/../3rdparty)

#rga
set(RGA_PATH ${CMAKE_SOURCE_DIR}/include/3rdparty/rga/RK3588)
set(RGA_LIB ${RGA_PATH}/lib/Linux//${LIB_ARCH}/librga.so)


include_directories(${CMAKE_SOURCE_DIR}/include/3rdparty)
include_directories(${RGA_PATH}/include)

#x264
set(x264_libs_DIR /home/fmsh/x264/tmp/lib)
set(x264_headers_DIR /home/fmsh/x264/tmp/include)
 
add_library(x264 SHARED IMPORTED )
 
#指定所添加依赖库的导入路径
set_target_properties(x264 PROPERTIES IMPORTED_LOCATION ${x264_libs_DIR}/libx264.so )
 
 #ffmpeg
set(ffmpeg_libs_DIR /home/fmsh/ffmpeg-4.1.3/tmp/lib)
set(ffmpeg_headers_DIR /home/fmsh/ffmpeg-4.1.3/tmp/include)
#对于find_package找不到的外部依赖库,可以用add_library添加
# SHARED表示添加的是动态库
# IMPORTED表示是引入已经存在的动态库
add_library( avcodec SHARED IMPORTED )
#指定所添加依赖库的导入路径
set_target_properties( avcodec PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavcodec.so )
 
add_library( avfilter SHARED IMPORTED )
set_target_properties( avfilter PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavfilter.so )
 
add_library( swresample SHARED IMPORTED )
set_target_properties( swresample PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswresample.so )
 
add_library( swscale SHARED IMPORTED )
set_target_properties( swscale PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswscale.so )
 
add_library( avformat SHARED IMPORTED )
set_target_properties( avformat PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavformat.so )
 
add_library( avutil SHARED IMPORTED )
set_target_properties( avutil PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavutil.so )

# opencv
# set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/include/3rdparty/opencv-linux-aarch64/share/OpenCV)
SET(OpenCV_DIR   /home/fmsh/opencv-4.5.5/opencv/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)

# zlmediakit
  set(ZLMEDIAKIT_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/zlmediakit)
  include_directories(${ZLMEDIAKIT_PATH}/include)
  set(ZLMEDIAKIT_LIBS ${ZLMEDIAKIT_PATH}/${LIB_ARCH}/libmk_api.so)

set(CMAKE_INSTALL_RPATH "lib")
# rknn_yolov5_demo
include_directories( 

  ${ffmpeg_headers_DIR} 
  ${CMAKE_SOURCE_DIR}/include
  )
add_executable(rknn_yolov5_demo_c++
        src/main.cc
        src/postprocess.cc
        src/preprocess.cc
        src/rkYolov5s.cc
        src/network_comm.cpp
        src/mpp_encoder.cpp
        src/mpp_decoder.cpp
)
target_link_libraries(rknn_yolov5_demo_c++
  ${RKNN_RT_LIB}
  # ${OpenCV_LIBS}
  ${ffmpeg_libs_DIR}
 opencv_world
 avformat avfilter avcodec avutil swresample swscale
  ${RGA_LIB}
  ${MPP_LIBS}
  ${ZLMEDIAKIT_LIBS}

)
# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
install(TARGETS rknn_yolov5_demo_c++ DESTINATION ./)
install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)
install(PROGRAMS ${RGA_LIB} DESTINATION lib)
install(DIRECTORY model DESTINATION ./)

if(MPP_LIBS)
  install(PROGRAMS ${MPP_LIBS} DESTINATION lib)
endif()

if(ZLMEDIAKIT_LIBS)
  install(PROGRAMS ${ZLMEDIAKIT_LIBS} DESTINATION lib)
endif()

windows下如何编写

新建CMakeLists.txt

cmake_minimum_required(VERSION 3.28.1)
project(hello)

set(CMAKE_CXX_COMPILER "g++")
aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)

set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(hello ${SRC_SUB} ${SRC_CUR})

WinGW和cmake安装完成之后需要将其bin目录添加到环境变量中,是否成功添加到环境变量可以在命令行cmd界面输入g++ --version和cmake --version查看,如果输出了版本号则成功。

ps:安装完WinGW之后,需要将WinGW自带的make工具改一下名称,将WinGW的bin文件夹下的mingw32-make.exe复制一份然后改名为make.exe,不要直接改,mingw32-make.exe在cmake的时候会被调用。不改也行,后面使用make命令的时候需要写mingw32-make。

新建build文件夹在该目录下依次执行以下命令

cmake ..
cmake

最后在bin文件夹下就可以找到生成的可执行文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值