头文件和源文件分别在两个文件夹里,编译成库文件

对于小项目,头文件和源文件在一个文件夹里,整个文件布局如下:
test #主目录
---main.cpp
---CMakeLists.txt
---src #子目录
------functions.cpp
------functions.h
------CMakeLists.txt

这样运行的过程就是用main 函数调用编译好的库文件即可
此时,子目录的CMakeLists.txt写法如下:

# 查询当前目录下所有的源文件并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 编译成静态库文件
add_library(Functions ${DIR_LIB_SRCS})

主目录test下的CMakeLists.txt写法如下:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
set( CMAKE_BUILD_TYPE Release )
set( CMAKE_CXX_FLAGS "-std=c++11" )
# 项目信息
project (Demo2)
# 查找当前目录下的所有源文件并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
#添加子目录
add_subdirectory(functions)
# 生成可执行文件
add_executable(main ${DIR_SRCS})
target_link_libraries(main Functions) #连接到编译好的库文件

test目录下的main函数#include 头文件

#include "src/functions.h" 

对于较大的项目,头文件和源文件分别在不同的文件夹里,此时可以采用类比法。还是上面的例子,只不过此时文件结构发生变化
test #主目录
---main.cpp
---CMakeLists.txt
---src #子目录
------functions.cpp
------CMakeLists.txt
---include
------functions.h

这个时候src子目录文件下的CMakeLists.txt要发生小小变换即可

include_directories("/home/yuancaimaiyi/桌面/test/include")#发生变化之处,只需要添加头文件的目录即可
aux_source_directory(. DIR_LIB_SRCS)
# 编译成静态库文件
add_library(Functions  ${DIR_LIB_SRCS})

++主目录CMakeLists.txt不变++,还有一处变化的是主目录下的主函数main #include 的时候要变了

#include "include/functions.h"
多采用第二种方式写法,规范自己
在CLion中编写头文件的步骤如下: 1. 打开CLion并创建一个新的C/C++项目。 2. 在项目的根目录下创建一个名为`include`的文件夹,用于存放头文件。 3. 在`include`文件夹中创建一个名为`myheader.h`的头文件,可以根据需要定义所需的函数、结构体或宏等。 4. 在需要使用该头文件源文件中,使用`#include`指令引入头文件。例如,如果源文件名为`main.c`,则可以在该文件的开头添加`#include "myheader.h"`。 5. 在CLion的CMakeLists.txt文件中,使用`include_directories`指令指定头文件目录。例如,如果头文件放在`include`文件夹中,则可以添加以下指令:`include_directories(include)`。 6. 编写完头文件源文件后,可以进行编译运行。 需要注意的是,根据引用\[1\]的描述,如果你使用的是一个模板文件,那么在每次使用CubeMX生成代码时,CMakeLists.txt文件会被覆盖,用户的代码将不会被保存。因此,你可能需要修改模板文件CMakeLists_template.txt来包含你的头文件库文件的相关指令。具体的修改方式可以根据你的项目需求模板文件的内容进行调整。 引用\[1\]: 对于一个项目,不可避免地会用到第三方库或者自己创建的.c/.h文件,也就是需要修改CmakeList文件。但这CMakelist开头写明了#此文件从模板自动生成! 请勿更改!,其原因为在每一次使用CubeMX生成代码时此文件会被覆盖,用户的代码将不会被保存。所以需要修改模板文件CMakeLists_template.txt。 引用\[2\]: PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); return ch; } 然后即可使用`printf`函数。且此段代码在KeilClion中均可正常编译运行。 引用\[3\]: 当编译一个需要使用第三方库的软件时,我们需要知道去哪寻找头文件,则CMakeLists.txt需要指定头文件目录库文件: include_directories(/usr/include/curl) target_link_libraries(myprogram path/curl.so)。 #### 引用[.reference_title] - *1* *2* [使用Clion开发STM32](https://blog.youkuaiyun.com/oXiaoLingTong/article/details/125313393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [cmake find_package](https://blog.youkuaiyun.com/qq_29935433/article/details/123554805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值