安卓做视频网站好,西安市免费做网站,高清视频网络服务器,icp备案系统1.编译多个源程序时CMakeLists文件编写
1.若源程序目录结构如下#xff1a; main.cpp中include“LCD_2inch4.h”头文件#xff0c;而LCD_2inch4.h中include其它源程序#xff0c;则CmakeLists.txt文件可为如下#xff1a;
# 设置项目名称
cmake_minimum_required(VERSI…1.编译多个源程序时CMakeLists文件编写
1.若源程序目录结构如下 main.cpp中include“LCD_2inch4.h”头文件而LCD_2inch4.h中include其它源程序则CmakeLists.txt文件可为如下
# 设置项目名称
cmake_minimum_required(VERSION 3.10) # 确保CMake版本足够新
project(MyProject) set(CMAKE_SYSTEM_NAME Linux)
#set(CMAKE_SYSTEM_PROCESSOR arm)set(tools /home/tao/linux/milkv-duo256/host-tools/gcc/riscv64-linux-musl-x86_64)#set(CMAKE_SYSROOT ${tools}/sysroot)
set(CMAKE_C_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-g)
set(CMAKE_AR ${tools}/bin/riscv64-unknown-linux-musl-ar)
set(CMAKE_RANLIB ${tools}/bin/riscv64-unknown-linux-musl-ranlib)# 定义目录变量
set(DIR_Config ${CMAKE_SOURCE_DIR}/lib/Config)
set(DIR_EPD ${CMAKE_SOURCE_DIR}/lib/LCD)
set(DIR_FONTS ${CMAKE_SOURCE_DIR}/lib/Fonts)
set(DIR_GUI ${CMAKE_SOURCE_DIR}/lib/GUI)
set(DIR_Examples ${CMAKE_SOURCE_DIR}/examples)
set(DIR_wiringx /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr)
set(DIR_BIN ${CMAKE_SOURCE_DIR}/bin)
#wiringx是main.cpp中include的其他头文件# 设置编译选项
set(CMAKE_CXX_STANDARD 11) # 假设您使用C (如果是C请使用CMAKE_C_STANDARD)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g -O0 -Wall) # 定义USELIB变量并基于它决定是否链接库 这部分if判断可省去
set(USELIB USE_DEV_LIB)
if(${USELIB} STREQUAL USE_DEV_LIB) set(LIBS pthread m)
else() set(LIBS )
endif() # 添加包含目录 即头文件所在目录
include_directories( ${DIR_Config} ${DIR_EPD} ${DIR_GUI} ${DIR_FONTS} ${DIR_Examples} ${DIR_wiringx}/include
) # 添加源文件并设置目标 有源程序的文件夹
file(GLOB_RECURSE SRC_LIST ${DIR_EPD}/*.c ${DIR_Config}/*.c ${DIR_GUI}/*.c ${DIR_Examples}/*.cpp ${DIR_FONTS}/*.c
) #for opencv main中使用了opencv不使用则可以不加
set(OpenCV_DIR /home/tao/linux/milkv-duo256/duo-examples/opencv-mobile-milkv/opencv-mobile-4.9.0-milkv-duo/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
#添加opencv头文件
include_directories(${OpenCV_INCLUDE_DIRS})#指定由源程序生成可执行程序main,可换为其它名字
add_executable(main ${SRC_LIST}) # 查找库文件指定搜索路径 添加第三方库时使用fnd_library命令之后 arget_link_libraries命令添加库
find_library(MY_LIB NAMES wiringx PATHS /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr/lib NO_DEFAULT_PATH) # 如果USELIB是USE_DEV_LIB则链接pthread和m库
if(${USELIB} STREQUAL USE_DEV_LIB) target_link_libraries(main ${LIBS} ${MY_LIB} ${OpenCV_LIBS} )
endif() # 设置输出目录为DIR_BIN注意CMake默认使用build目录但可以通过设置CMAKE_ARCHIVE_OUTPUT_DIRECTORY等变量来改变
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR_BIN}) # 清理规则CMake不直接支持Makefile的clean目标但可以使用make clean或自定义命令
# 在CMake中通常使用cmake --build . --target clean来清理这需要在项目根目录的CMakeLists.txt中定义clean目标
# 这里为了简单起见我们不定义clean目标 # 如果需要交叉编译可以设置工具链文件或使用CMAKE_TOOLCHAIN_FILE变量
# 例如set(CMAKE_TOOLCHAIN_FILE path/to/toolchain.cmake)
# 注意这需要在您的toolchain.cmake文件中定义交叉编译器的路径和其他相关设置 # 如果您使用的是C而不是C请将add_executable替换为add_executable并相应地更改变量名例如CMAKE_C_FLAGS
之后在bin目录中cmake … make命令编译
2.将一些驱动源程序生成动态库so方便调用
1.main.c每次调用LCD_2inch4.h中的函数需要一起编译这四个源程序文件夹太麻烦可将LCD的程序生成so动态链接库,CMakeLists.txt如下
# 设置项目名称
cmake_minimum_required(VERSION 3.10) # 确保CMake版本足够新
project(MyProject) set(CMAKE_SYSTEM_NAME Linux)
#指定编译器
set(tools /home/tao/linux/milkv-duo256/host-tools/gcc/riscv64-linux-musl-x86_64)set(CMAKE_C_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-g)
set(CMAKE_AR ${tools}/bin/riscv64-unknown-linux-musl-ar)
set(CMAKE_RANLIB ${tools}/bin/riscv64-unknown-linux-musl-ranlib)# 定义目录变量 ,wiringx是调用外部的库bin是指定生成的结果文件存放的地方
set(DIR_Config ${CMAKE_SOURCE_DIR}/lib/Config)
set(DIR_EPD ${CMAKE_SOURCE_DIR}/lib/LCD)
set(DIR_FONTS ${CMAKE_SOURCE_DIR}/lib/Fonts)
set(DIR_GUI ${CMAKE_SOURCE_DIR}/lib/GUI)
set(DIR_wiringx /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr)
set(DIR_BIN ${CMAKE_SOURCE_DIR}/bin) # 设置编译选项
set(CMAKE_CXX_STANDARD 11) # 假设您使用C (如果是C请使用CMAKE_C_STANDARD)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g -O0 -Wall)
set(LIBS pthread m)
# 添加包含目录
include_directories( ${DIR_Config} ${DIR_EPD} ${DIR_GUI} ${DIR_FONTS} ${DIR_wiringx}/include
)
# 添加源文件并设置目标
file(GLOB_RECURSE SRC_LIST ${DIR_EPD}/*.c ${DIR_Config}/*.c ${DIR_GUI}/*.c ${DIR_FONTS}/*.c
) # 查找库文件指定搜索路径
find_library(MY_LIB NAMES wiringx PATHS /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr/lib NO_DEFAULT_PATH)
#指定库名为lcd2in4,生成的文件叫做liblcd2in4.so
add_library(lcd2in4 SHARED ${SRC_LIST})target_link_libraries(lcd2in4 ${LIB} ${MY_LIB}) #添加需要使用的库# 设置输出目录为DIR_BIN注意CMake默认使用build目录但可以通过设置CMAKE_ARCHIVE_OUTPUT_DIRECTORY等变量来改变
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR_BIN})
在bin目录使用cmake … make即可生成库liblcd2inch4.so
把main.c中includeLCD_2inch4.h改为lcd2inch4.h新建一个lcd2inch4.h文件内容就是原来main.c调用的LCD_2inch4.h中的内容名字是否需要必须和库名字一样不清楚这里是一样的。将h文件 和so文件任意放在哪个位置只需在CMakeLists.txt中find_librarys时指定so库文件位置即可CMakeLists.txt可为下
# 设置项目名称
cmake_minimum_required(VERSION 3.10) # 确保CMake版本足够新
project(MyProject) set(CMAKE_SYSTEM_NAME Linux)
#set(CMAKE_SYSTEM_PROCESSOR arm)set(tools /home/tao/linux/milkv-duo256/host-tools/gcc/riscv64-linux-musl-x86_64)#set(CMAKE_SYSROOT ${tools}/sysroot)
set(CMAKE_C_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/riscv64-unknown-linux-musl-g)
set(CMAKE_AR ${tools}/bin/riscv64-unknown-linux-musl-ar)
set(CMAKE_RANLIB ${tools}/bin/riscv64-unknown-linux-musl-ranlib)# 定义目录变量
set(DIR_Examples ${CMAKE_SOURCE_DIR}/examples)
set(DIR_wiringx /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr)
set(DIR_BIN ${CMAKE_SOURCE_DIR}/bin) # 设置编译选项
set(CMAKE_CXX_STANDARD 11) # 假设您使用C (如果是C请使用CMAKE_C_STANDARD)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g -O0 -Wall) set(LIBS pthread m) # 添加包含目录
include_directories( ${DIR_Examples} ${DIR_wiringx}/include
) # 添加源文件并设置目标
file(GLOB_RECURSE SRC_LIST ${DIR_Examples}/*.cpp
)
#for opencv,不使用则不添加
set(OpenCV_DIR /home/tao/linux/milkv-duo256/duo-examples/opencv-mobile-milkv/opencv-mobile-4.9.0-milkv-duo/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})add_executable(main ${SRC_LIST}) # 查找库文件指定搜索路径
find_library(MY_LIB NAMES wiringx PATHS /home/tao/linux/milkv-duo256/duo-examples/duo-sdk/rootfs/usr/lib NO_DEFAULT_PATH) find_library(LCD_LIB NAMES lcd2in4 PATHS ${DIR_Examples} NO_DEFAULT_PATH) target_link_libraries(main ${LIBS} ${MY_LIB} ${OpenCV_LIBS} ${LCD_LIB}) # 设置输出目录为DIR_BIN注意CMake默认使用build目录但可以通过设置CMAKE_ARCHIVE_OUTPUT_DIRECTORY等变量来改变
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DIR_BIN})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR_BIN})
3.若cpp文件中include 其他头文件但其他头文件对应源程序为c程序实现的则使用extern C告诉编译器这些函数签名用c语言的函数签名。否则cpp不能识别其函数