CMake如何包含头文件,以便它们可以与尖括号一起使用?

时间:2017-03-18 15:40:38

标签: cmake operating-system

我正在尝试将CMake用于MIT JOS操作系统项目 - http://repo.or.cz/mit-jos.git/treehttps://pdos.csail.mit.edu/6.828/2016/jos.git

这是目录结构

lab
- .bochsrc
- CODING
- GNUmakefile
- boot
- conf
- fs
- grade.sh
+ inc
    - assert.h
    - elf.h
    - error.h
    - kbdreg.h
    - memlayout.h
    - mmu.h
    - stab.h
    - stdarg.h
    - stdio.h
    - string.h
    - types.h
    - x86.h
- kern
- lib
- mergedep.pl
- user
- CMakeLists.txt

CMakeLists.txt文件夹(即项目文件夹)下的lab看起来像

    cmake_minimum_required(VERSION 3.6)
    project(lab)

    set(CMAKE_CXX_STANDARD 11)

    set(SOURCE_FILES
            boot/main.c
            fs/test.c
            kern/console.c
            kern/console.h
            kern/entrypgdir.c
            kern/init.c
            kern/kdebug.c
            kern/kdebug.h
            kern/monitor.c
            kern/monitor.h
            kern/printf.c
            lib/printfmt.c
            lib/readline.c
            lib/string.c
            user/sendpage.c)

    add_executable(lab ${SOURCE_FILES})

如何在inc下添加标题文件,以便源文件仍然可以使用#include <inc/types.h>等而不是#include "../inc/types.h"包含它们?

1 个答案:

答案 0 :(得分:2)

听起来你需要为你的目标添加一个包含目录target_include_directories,例如(在你的CMakeLists.txt末尾):

target_include_directories(lab PRIVATE ${CMAKE_SOURCE_DIR} )

对于使用#include时尖括号和引号之间的区别,通常只对“系统”头文件(例如C / C ++标准头文件)使用尖括号,并为用户提供的标题使用引号(见What is the difference between #include <filename> and #include "filename"?)。