CMake项目无法include本地头文件

  • 项目框架

img

  • ./CMakeLists.txt
cmake_minimum_required(VERSION 3.25)
project(asy_c_test C)

set(CMAKE_C_STANDARD 11)

# 指定 lib 目录
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 指定头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)

add_library(asy_c_test library.c main.c main.c)
# 将库链接到项目中
target_link_libraries(${PROJECT_NAME} libasy_c_test.a)
  • ./include/library.h
#ifndef ASY_C_TEST_LIBRARY_H
#define ASY_C_TEST_LIBRARY_H

void printArrayElement(const int *, int);

void editArrayElement(int *, int, int);

void fillArray(int *, int, int);

#endif //ASY_C_TEST_LIBRARY_H
  • ./library.c
#include <stdio.h>

void printArrayElement(const int *pArr, int length) {
    for (int i = 0; i < length; ++i) {
        printf_s("%d: %d\n", i, *(pArr + i));
    }
}

void editArrayElement(int *pArr, int index, int value) {
//    *(pArr + index) = value;
    pArr[index] = value;
}

void fillArray(int *pArr, int length, int value) {
    for (int i = 0; i < length; ++i) {
        pArr[i] = value;
    }
}
  • ./main.c
#include <library.h>

int main() {
    int arr[10];
    fillArray(arr, 10, 50);
    editArrayElement(arr, 8, 40);
    printArrayElement(arr, 10);

    return 0;
}

运行./main.c的int main();,报错如下

F:\Documents\asy-c-test\main.c:1:10: fatal error: library.h: No such file or directory
    1 | #include <library.h>
      |          ^~~~~~~~~~~
compilation terminated.
  • 这篇文章:Liunx下的Cmake编译C/C++程序方法精要 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: CMake添加不同目录文件的方法中的 文件目录结构 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • .
    ├── CMakeLists.txt
    ├── inc
    │   ├── ansi_def.h
    │   ├── ansi.h
    │   ├── ansi_port.h
    │   ├── nr_micro_shell_config.h
    │   └── nr_micro_shell.h
    ├── main.c
    ├── nr_micro_shell_commands.c
    └── src
        ├── ansi.c
        ├── ansi_port.c
        ├── CMakeLists.txt
        └── nr_micro_shell.c
    
    2 directories, 12 files
    
    
  • 您还可以看一下 夏曹俊老师的CMake构建大型c++项目课程中的 第三章介绍小节, 巩固相关知识点

你试试

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)