CmakeLists.txt相关
恩培计算机视觉
一、动态库和链接分开生成
1.1、生成动态库
# 最低版本要求
cmake_minimum_required(VERSION 3.10)
#项目信息
project(Account)# 指定生成目标:动态库
# 三个参数分别是:库名称、库类型、源文件
# linux下库的全名为:libAccount.so(动态库)/libAccount.a(静态库)
add_library(Account SHARED Account.cpp)#STATIC是静态库
1.2、链接的部分
# 最低版本要求
cmake_minimum_required(VERSION 3.10)
#项目信息
project(test_acount)#添加可执行文件目标(target)
add_executable(test_account main.cpp)#为目标添加头文件目录
target_include_directories(test_account PUBLIC "../account_dir")
#为目标添加库文件目录
target_link_directories(test_account PUBLIC "../account_dir/build")
#为目标链接库
target_link_libraries(test_account Account)
查看动态库依赖关系
ldd ./build/test_account
二、动态库和链接一起生成(先添加动态库、在添加可执行文件)
# 最低版本要求
cmake_minimum_required(VERSION 3.10)
#项目信息
project(test_acount)#为目标添加库
add_libraries(Account SHARED "account_dir/Account.cpp" "account_dir/Account.h")#添加可执行文件目标(target)
add_executable(test_account "test_account/main.cpp")#为目标添加头文件目录
target_include_directories(test_account PUBLIC "../account_dir")#为目标链接库
target_link_libraries(test_account Account)#因为在一个里面,不需要寻找
三、其他语法相关
3.1 设置变量
set(arch ${CMAKE_HOST_SYSTEM_PROCESSOR})
3.2 打印
message("CMAKE_BUILD_PYTHON: $ENV{USE_Python}")
3.3 使用了CMake的file(GLOB_RECURSE)命令来递归地收集指定目录下的所有符合特定模式的文件,并将这些文件的路径存储在一个变量中。具体来说:
file(GLOB_RECURSE FASTBEV_CORE_FILES …):这是CMake的一个命令,用于生成一个包含所有匹配文件的列表。GLOB_RECURSE选项表示递归地搜索子目录。FASTBEV_CORE_FILES是一个变量名,用于存储搜索到的文件列表。
file(GLOB_RECURSE FASTBEV_CORE_FILES src/fastbev/*.cu src/fastbev/*.cppsrc/common/tensor.cusrc/common/tensorrt.cpp
)
3.4 寻找依赖find_package
#寻找gflags库,REQUIRED表示必须存在,否则报错
find_package(gflags REQUIRED)
if(gflags_FOUND)#为目标添加头文件目录target_include_directories(find_demo PUBLIC ${gflogs_INCLUDE_DIR})#为目标链接库target_link_libraries(find_demo ${gflogs_LIBRARIES})
else()massage(FATAL_ERROR "gflogs not found")
endif()