CMakeLists生成调用静态动态库可执行demo

demo结构截图
在这里插入图片描述

src/CMakelists.txt

cmake_minimum_required(VERSION 3.12)

project(Test)

# 设置C++标准版本
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

add_subdirectory(TestLib/src)
add_subdirectory(TestDll/src)
add_subdirectory(TestExe/src)

########################################
#
# 文件操作 编译时的操作
#
#######################################
# 创建文件夹
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/test)
#file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin_back)
# 拷贝文件
#file(GLOB dll "${CMAKE_BINARY_DIR}/bin/*.so"
#	"${CMAKE_BINARY_DIR}/bin/*.dll")
#file(COPY ${dll}  DESTINATION ${CMAKE_BINARY_DIR}/test)
#message(----------dll:${dll})
# 拷贝文件夹
#execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/bin_back)
#脚本执行期间才会执行,故可以先编辑写当前CMakeList.txt 构建时会执行该脚本
#execute_process(
#        COMMAND ${LRELEASE_EXECUTABLE}  ${CMAKE_SOURCE_DIR}/zh_CN.ts -qm ${CMAKE_SOURCE_DIR}/../${CMAKE_BUILD_TYPE}/resource/zh_CN.qm)

##########################
#
# 安装
#
#############################

# 将目录的内容递归安装到目标路径
#install(DIRECTORY my_include/ DESTINATION include)

# 只安装特定扩展名的文件(如 .h 文件)
#install(DIRECTORY my_include/ DESTINATION include
#    FILES_MATCHING PATTERN "*.h"
#)

# 排除特定目录
#install(DIRECTORY my_project/ DESTINATION project
#    PATTERN "build" EXCLUDE
#)


####################
#
# cmake  常用变量
#
####################
#CMAKE_SOURCE_DIR , PROJECT_SOURCE_DIR, CMAKE_BINARY_DIR  这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录
#CMAKE_CURRENT_SOURCE_DIR 表示当前正在处理的 CMakeLists.txt 文件所在的目录
#CMAKE_BUILD_TYPE   Debug/Release
#PROJECT_NAME 项目名称

src/TestLib/src/CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
  
project(TestLib)

# 设置C++标准版本
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加包含目录 (如果有的话)
#include_directories(header)

set(header
        header/testLib.h
)
source_group("头文件" FILES ${header})


#set(source
#       testLib.cpp
#)
file(GLOB soush:///
        rce "./*.cpp")
source_group("源文件" FILES ${source})

set(ALL_FILES
        ${header}
        ${source}
)

# 设置库的输出目录(可选)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

# 添加静态库
add_library(${PROJECT_NAME} STATIC  ${ALL_FILES})

src/TestDll/src/CMakeLists.txt

cmake_minimum_required(VERSION 3.12)

project(TestDll)

# 设置C++标准版本
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加包含目录 (如果有的话)
#include_directories(header)

###################################
#
# Source group
#
###################################
set(header
	testDll.h
)
source_group("头文件" FILES ${header})


#set(source
#	testDll.cpp
#)
file(GLOB source "./*.cpp")
source_group("源文件" FILES ${source})

set(ALL_FILES
	${header}
	${source}
)

##########################################
#
# output
#
##########################################

# 设置静态库的输出目录(可选)
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# 添加静态库
#add_library(${name} STATIC  testDll.cpp)

# 设置动态库的输出目录(可选)
if (UNIX)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)#理论上是这个,但仅linux生效
else()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
endif()
# 添加动态库
add_library(${PROJECT_NAME} SHARED ${ALL_FILES})

# 设置库的版本号(可选)
#set_target_properties(my_shared_library PROPERTIES
#                     VERSION 1.0.0
#                     SOVERSION 1)

############################
#
# 链接静态库
#
############################

# 添加头文件搜索路径(如果静态库的头文件不在默认路径中)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../TestLib/src/header/)

# (可选)使用link_directories指定静态库的搜索路径
link_directories(${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})

# 链接静态库到目标项目
# 使用库的基本名称(不包括前缀lib和后缀)
# 如果使用了link_directories,则只需指定库名
# 如果没有使用link_directories,则需要指定库的完整路径或相对路径
target_link_libraries(${PROJECT_NAME} TestLib)  # 如果使用了link_directories
#target_link_libraries(my_executable /path/to/your/libs/libmy_static_library.a)  # 使用>完整路径
# 或者,如果库文件在构建目录的某个子目录中,可以使用相对路径
# target_link_libraries(my_executable ${CMAKE_BINARY_DIR}/libs/libmy_static_library.a)  # 使用相对路径

src/TestExe/src/CMakeLists.txt

cmake_minimum_required(VERSION 3.12)

project(TextExe)

# 设置C++标准版本
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

#set(ALL_FILES
#	main.cpp
#)
file(GLOB ALL_FILES "./*.cpp")

# 可选:如果您希望将可执行文件生成到特定目录,可以使用下面的语句
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# 添加可执行文件
add_executable(${PROJECT_NAME} ${ALL_FILES})

############################
#
# 链接静态库
#
############################

# 添加头文件搜索路径(如果静态库的头文件不在默认路径中)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../TestLib/src/header)

# (可选)使用link_directories指定静态库的搜索路径
link_directories(${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})

# 链接静态库到目标项目
# 使用库的基本名称(不包括前缀lib和后缀)
# 如果使用了link_directories,则只需指定库名
# 如果没有使用link_directories,则需要指定库的完整路径或相对路径
target_link_libraries(${PROJECT_NAME} TestLib)  # 如果使用了link_directories
#target_link_libraries(my_executable /path/to/your/libs/libmy_static_library.a)  # 使用完整路径
# 或者,如果库文件在构建目录的某个子目录中,可以使用相对路径
# target_link_libraries(my_executable ${CMAKE_BINARY_DIR}/libs/libmy_static_library.a)  # 使用相对路径

############################
#
# 链接动态库
#
############################
# 添加头文件搜索路径(如果动态库的头文件不在默认路径中)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../TestDll/src/header)

# (可选)使用link_directories指定动态库的搜索路径
# 链接库目录
target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})

# 链接动态库到目标项目
# 使用库的基本名称(不包括前缀lib,但CMake会自动添加)
# 如果使用了link_directories,则只需指定库名(不带扩展名)
# target_link_libraries(my_executable my_dynamic_library)  # 如果使用了link_directories

# 如果使用完整路径或相对路径,则需要包括适当的文件扩展名(或让CMake自动选择)
# 但为了跨平台兼容性,通常不指定扩展名
target_link_libraries(${PROJECT_NAME} TestDll)  # 不指定扩展名,让CMake自动选择

# 或者,如果库文件在构建目录的某个子目录中,可以使用相对路径(不推荐指定扩展名)
# target_link_libraries(my_executable ${CMAKE_BINARY_DIR}/libs/my_dynamic_library)  # 使用相对路径,不指定扩展名

windows编译脚本build.bat

set project_name=Test
set /p var=wille build %project_name% , Please choice buildType=Debug)(0/1)? 0.Debug 1.Release:
if %var% equ 1 (set buildType=Release) else (set buildType=Debug)
echo will build %project_name% %buildType%
pause
mkdir %project_name%_Build_%buildType%
cd %project_name%_Build_%buildType%
cmake ../src -DCMAKE_BUILD_TYPE=%buildType%
cmake --build . --config %buildType%
pause

Linux编译脚本build.sh

#sh build.sh 0/1
project_name=Test
buildType=Debug
if [ $# -eq 1 ]; then
	buildType=Release
fi
echo "will build ${project_name} ${buildType}"
mkdir ${project_name}_Build_${buildType}
cd ${project_name}_Build_${buildType}
cmake ../src -DCMAKE_BUILD_TYPE=${buildType}
cmake --build . --config ${buildType}

在这里插入图片描述
demo代码

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值