关于CMakeLists自定义头文件、源文件的配置

1、自定义头文件

如果在功能包下面的include下创建了自定义的.h文件,在配置CMakeLists时需要把下面代码的注释解开;

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

2、自定义源文件

如果功能包的src下有多个cpp文件,但是想在一个节点下运行,一共有两种方法,自我感觉下面的方法1比较简单,

${PROJECT_NAME}:表示以包名生成的一个名字;${PROJECT_SOURCE_DIR}:表示该包所在的文件夹,

方法1

add_executable(${PROJECT_NAME}_node src/hello.cpp src/use_hello.cpp)

直接将src下的多个cpp文件都添加进该命令行,然后将下面代码的注释给解开即可

add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)

如果有用到其他包里的源文件,也可以直接添加到可执行命令行,下面这行命令的意思是获取该包所在上级目录toollib的src下的源文件,打包给SRC_LIST,并按下面的命令添加到可执行文件,即可。

aux_source_directory(${PROJECT_SOURCE_DIR}/../toollib/src SRC_LIST)
add_executable(${PROJECT_NAME}_node src/hello.cpp src/use_hello.cpp 
 ${SRC_LIST}
)

方法2(仅测试有两个cpp文件)

添加c++配置文件(main函数的执行要依赖于这个文件)

add_library(head_src
  include/${PROJECT_NAME}/hello.h
  src/hello.cpp
)

head_src是自定义的,然后依次添加头文件、源文件,

然后添加可执行文件,可执行文件只添加有main函数的cpp文件,

add_executable(use_hello src/use_hello.cpp)

use_hello名字是自定义的,当然也可以用默认的,这个名字是运行时的节点名,它要与target_link_libraries里的${PROJECT_NAME}_node相对应,一个地方改了,另一个地方也要改。

然后是配置target_link_libraries,如下:use_hello是main函数的cpp文件,它的执行依赖于head_src

target_link_libraries(head_src
  ${catkin_LIBRARIES}
)
target_link_libraries(use_hello
  head_src
  ${catkin_LIBRARIES}
)

3、让一个包里src下不同的cpp文件分别生成不同的运行节点

配置CMakeLists时,在添加可执行文件行,给不同的cpp文件分别起上不同的名字,然后在target_link_libraries也分别对应上相应的名字即可。

add_executable(haha01 src/haha01.cpp  )
add_executable(hear01 src/hear01.cpp  )
add_executable(person_pub src/demo03.cpp  )
add_executable(person_sub src/demo04.cpp  )
target_link_libraries(haha01
  ${catkin_LIBRARIES}
)
target_link_libraries(hear01
  ${catkin_LIBRARIES}
)
target_link_libraries(person_pub
  ${catkin_LIBRARIES}
)
target_link_libraries(person_sub
  ${catkin_LIBRARIES}
)

以上仅供参考,欢迎交流学习。

 

### 如何在 ESP-IDF 项目中包含自定义头文件 为了使 ESP-IDF 项目能够识别并使用自定义头文件,在项目结构设计上需遵循特定的方式。当构建基于 ESP-IDF 的应用程序时,如果希望引入自己的库或模块,则应按照官方推荐的方法来组织这些资源。 对于自定义组件而言,通常会在 `components` 文件夹下建立相应的子目录用于存放源码及相关接口声明文件(即 `.h` 头文件),例如: ```plaintext ├── components/ │ └── mycomp/ │ ├── include/ │ │ └── mycomp.h │ └── mycomp.c ``` 为了让其他部分可以访问到这个新加入的头文件,应当确保其路径被正确配置到了编译选项里。具体来说就是在对应的 CMake 或者 Make 配置脚本里面指定好包含路径[^1]。 假设有一个名为 `mycomp` 的组件位于上述位置,并且想要让此组件内部以及外部都能顺利找到 `mycomp.h` 这个头文件的话,那么可以在该组件根目录下的 `CMakeLists.txt` 中添加如下指令: ```cmake idf_component_register( SRCS "mycomp.c" INCLUDE_DIRS "include" ) ``` 这段命令告诉 IDF 构建系统哪些是属于当前组件的源文件(`SRCS`) 和公共头文件所在的相对路径 (`INCLUDE_DIRS`). 同样地, 若是在主程序(main)或者其他任何地方需要用到此类私有化的 API 定义时也得相应调整各自的设置以保证链接阶段不出错[^4]. 另外值得注意的是,在某些情况下可能还需要编辑项目的全局配置文件如 `sdkconfig`, 来开启一些必要的特性开关以便支持更复杂的依赖关系管理;不过针对单纯增加几个额外的 .h/.c 对象这种情况一般无需改动太多东西[^3].
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值