Cmake查找所有指定cpp文件并进行编译

学一招,在编译ORB-SLAM3时,CMakeLists.txt中搞了一大堆cpp文件,这里设置一下,让CMake自己查找制定目录所有的cpp文件,看上去简洁很多。

file(GLOB_RECURSE CPP_FILES     
${PROJECT_SOURCE_DIR}/src/*.cc 
${PROJECT_SOURCE_DIR}/src/*.cpp
)

add_library(${PROJECT_NAME} SHARED ${CPP_FILES})
### 使用CMake配置同时包含C和C++文件的项目 #### 配置基础环境 为了使CMake能够处理同一项目中的C和C++源代码,在`CMakeLists.txt`中应指定项目的最低支持版本启用这两种语言的支持: ```cmake cmake_minimum_required(VERSION 3.10) project(MixedLangProject VERSION 1.0 LANGUAGES C CXX) ``` 此部分声明了所需的最小CMake版本以及所使用的编程语言[^1]。 #### 设置编译选项 对于特定于C或C++编译标志,可以分别设定不同的编译参数而不影响另一种语言。这可以通过设置`CMAKE_C_FLAGS`和`CMAKE_CXX_FLAGS`来实现: ```cmake set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") # 对于C代码增加警告级别 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") # 设定C++标准为C++17 ``` 这些指令允许独立调整每种语言的具体编译特性。 #### 添加库路径与链接器选项 当涉及到不同类型的依赖项时(比如第三方静态/动态库),可能还需要额外指明它们的位置及其对应的链接器标记。例如,如果存在某些仅适用于C程序或者专门面向C++应用的外部资源,则可以在适当的地方加入相应的查找逻辑: ```cmake find_library(ZLIB_LIBRARY zlib REQUIRED) if (ZLIB_LIBRARY) target_link_libraries(${PROJECT_NAME} PRIVATE ${ZLIB_LIBRARY}) endif() ``` 这段脚本展示了如何定位zlib库,将其作为私有依赖添加到目标上;注意这里没有特别区分是用于C还是C++的目标,因为大多数情况下这样的区别是没有必要的[^2]。 #### 定义可执行文件或库 最后一步就是定义最终要构建的产品形式——无论是共享库、静态库还是单独的应用程序二进制文件。假设有一个名为`main.cpp`入口点函数所在的源码文件以及其他一些辅助性的`.c`/.cpp单元测试模块等组成整个工程结构的话,那么完整的描述可能是这样子的: ```cmake add_executable(mixed_example main.cpp helper.c test_module.cpp) target_include_directories(mixed_example PUBLIC include_dir_for_headers) target_compile_definitions(mixed_example PRIVATE SOME_MACRO=ON) ``` 上述片段创建了一个叫做`mixed_example`的新应用程序实例,关联了一些头文件夹位置还有预处理器宏定义给它使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值