如何包含子文件夹内的头文件?

Viewed 103

技术支持提问请严格按照以下格式提供对应信息,否则会影响回复时效,一定要描述清楚,以免一次回复无法解决问题

(提问前请先自查自己是否很仔细看过教程了,教程中的每句话都很重要,教程都是经过验证的,不会有问题的)

一、描述你遇到的问题

我在我的测试代码所在文件夹My_framework下创建了一个子文件夹test,内部包含了test.c和test.h。使用如图CMakeList文件进行描述,原意是将My_framework下的源文件雨子文件夹test下的文件路径包含,然后在拿给My_framework使用。但是编译就会提示“找不到文件或文件夹”,error所在位置就是My_framework源文件内的#include “test.h”这个位置。是我操作不对吗?

二、你具体做的所有步骤结果截图

三、当前开发板状态全景照片

请插入图片

四、开发板串口所有日志

请在此处粘贴串口日志

4 Answers


建议学下CMAKE

网上的教程都太拉跨了,只介绍有什么指令,指令内这是个属性这是个变量,根本没有很好的例子说明各种指令的作用。写了一大篇子,内容倒是挺多,却都是只说了个皮毛

改了你说的这个,保持一致。还是不行。你看我最下面两行,使用的变量是对的,只不过使用的属性方式不一样,也是报错。当然,我不懂这两行有什么区别。不理解。有没有讲的好的文章之类的,能否提供个链接。谢谢。

fatal error: test.h: No such file or directory
#include "test.h"
^~~~~~~~

我也没有好的文章。。。

善用GPT,这些小问题用GPT很快就能解决。









你自己对比一下哪里不一样吧,你肯定是哪里没改正确

好的,我对比一下看看。感谢

破案了。其实我写的CMakeList文件没问题,但是我是在peripheral文件夹内创建的我自己的工程,在这个路径下就识别不到。我类比你的路径,将我的工程放在了sample文件夹下,编译运行完全没问题。所以这个就是sample下的CMakeList文件内容和peripheral文件夹内CMakeList文件内容有什么说法了。


是因为samples文件夹下的CmakeLists.txt文件没有设置头文件目录,只设置了源文件

在下面加一句set(PUBLIC_HEADER "${PUBLIC_HEADER}" PARENT_SCOPE)就可以通过编译了

我这个还不是这回事,我这个里面是有这句话的,编译就是找不到

if(DEFINED CONFIG_SAMPLE_SUPPORT_MY_HELLO)
add_subdirectory_if_exist(my_hello)
endif()

if(DEFINED CONFIG_SAMPLE_SUPPORT_My_Timeout_Timer)
add_subdirectory_if_exist(my_timeout_timer)
endif()

if(DEFINED CONFIG_SAMPLE_SUPPORT_My_Uart_Test)
add_subdirectory_if_exist(my_uart_test)
endif()

set(SOURCES "${SOURCES}" PARENT_SCOPE)
set(PUBLIC_HEADER "${PUBLIC_HEADER_LIST}" PARENT_SCOPE)
set(LIBS "${LIBS}" PARENT_SCOPE)

这个先不管了,昨天改完路径之后可以用了。现在我还得再研究研究链接库怎么加入,很烦。从没有接触过CMakeList,根本不知道怎么配置