CMake和子文件夹中的头文件问题

程序员25

我正在尝试建立一个项目,在该项目中,子文件夹库src代码以及使用Cmake的顶级src代码都可以找到头文件。目前,我收到一条错误消息,指出找不到头文件。我的项目的结构如下所示:

root/
    src/           
        CMakeLists.txt     #(top level)  
        main.c     
        lib/
            lib1.c
            CMakeLists.txt     #(lower level)
            headers/
                lib1.h
    build/       

我的顶级CMakeLists.txt看起来像这样:

cmake_minimum_required(VERSION 3.13.4)

project(CmakeTUT_Proj) 

add_executable(${PROJECT_NAME} main.c)

target_include_directories(${PROJECT_NAME} PUBLIC Lib/headers/)
                                                          
add_subdirectory(Lib/)

target_link_directories(${PROJECT_NAME} PRIVATE Lib/headers/)

target_link_libraries(${PROJECT_NAME} name_of_lib) 

我的下层CMakeLists.txt看起来像:

add_library(name_of_lib  adder.c)

我的main.c和我的lib1.c程序包含库as #include "lib1.h",cmake可以正常运行,没有任何错误,但是当我用该项目构建项目时,make出现如下错误:

root/src/Lib/lib1.c:2:10: fatal error: lib1.h: No such file or directory
#include "lib1.h"

我想构建我的项目,以便main.c和lib1.c可以访问lib1.h。有任何想法吗?谢谢。

汤玛士

顾名思义,target_include_directories仅影响一个目标。因此,在进行设置时target_include_directories(${PROJECT_NAME} PUBLIC Lib/headers/),这会添加到已命名的可执行目标${PROJECT_NAME}的包含路径中,但不会添加到库的包含路径中name_of_lib

要解决此问题,您可以在较低级别添加库的包含路径CMakeLists.txt

target_include_directories(name_of_lib PUBLIC headers)

此外PUBLIC,此路径还会自动将此路径添加到任何依赖的目标上name_of_lib因此,在顶层CMakeLists.txt,您可以删除以下行:

target_include_directories(${PROJECT_NAME} PUBLIC Lib/headers/)

顺便说一句,这行看起来没用,也可以删除:

target_link_directories(${PROJECT_NAME} PRIVATE Lib/headers/)

链接库通常不放置在标头目录中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CMake找不到子文件夹中的包含文件

恢复“源文件”和“头文件”文件夹

在datagridview中显示子文件和子文件夹

如何使用 cmake 添加不同的头文件夹,以便项目正确编译和运行

计算这些子文件夹中的子文件夹和.exe文件的数量

使用Google Test和CMake在子文件夹中配置测试

删除文件夹和子文件夹中的某些文件类型和空文件夹

读取文件夹和子文件夹中的所有文件-进度和大小

在文件夹,子文件夹和多个文件中递归查找和重命名

删除文件夹“ tmp”和“缓存”中的文件和子文件夹

如何读取Bash Shell中多个文件夹和子文件夹中的文件

在Python中浏览文件和子文件夹

CMake链接不是子文件夹

递归清除其中没有文件的文件夹中的所有文件夹和子文件夹

如何使用Powershell计算文件夹和子文件夹中的文件

搜索文件夹和子文件夹python中的多个文件

从命令行计算文件夹和子文件夹中的文件

在文件夹、子文件夹和多个文件中递归查找

在文件夹和子文件夹中查找文件

什么 glob 模式用于文件夹和子文件夹中的文件?

Windows 批处理覆盖文件夹和子文件夹中的现有文件

为文件夹和子文件夹中的所有文件设置命名空间

将文件复制到文件夹和所有子文件夹中

如何递归地仅复制文件夹和子文件夹中的文件?

查找文件夹和子文件夹中的文件数?

Gitignore用于文件夹和子文件夹中的所有文件

使用python删除文件夹和子文件夹中的pdf文件?

从文件夹和子文件夹中获取文件列表 Excel VBA

如何使用电子循环浏览文件夹和子文件夹中的文件?