【学习】windows下cmake学习(二)——引入头文件

上节回顾

hello world

上一节写了最简单的hello world通过CmakeList编译并生成可执行文件,这节将学习如何用CmakeList引入头文件(怎么写着写着跟讲课稿是的)

目录结构

B-hello-headers
    ├───build
    ├───include
    │       Hello.h
    │
    └───src
            Hello.cpp
            main.cpp

通过Hello.h定义类及成员函数,Hello.cpp负责实现成员函数,main.cpp进行调用

// Hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
class Hello
{
public:
    void print();
};
#endif

// Hello.cpp
#include <iostream>
#include "Hello.h"
void Hello::print()
{
    std::cout << "Hello Headers!" << std::endl;
}

// main.cpp
#include "Hello.h"
int main(int argc, char *argv[])
{
    Hello hi;
    hi.print();
    return 0;
}

正文

使用上一节的CmakeLists

仍旧按照上节内容中CmakeLists的写法

cmake_minimum_required(VERSION 3.5)

project (hello_headers)

set(SOURCES
    src/Hello.cpp
    src/main.cpp
)

add_executable(hello_headers ${SOURCES})

在build目录下cmake

cmake -G "MinGW Makefiles" ..

会发现项目构建成功,接下来尝试make

make

[ 33%] Building CXX object CMakeFiles/hello_headers.dir/src/Hello.cpp.obj
E:\CodeSpace\Cpp_Study\B-hello-headers\src\Hello.cpp:2:10: fatal error: Hello.h: No such file or directory
 #include "Hello.h"
          ^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles\hello_headers.dir\build.make:75: CMakeFiles/hello_headers.dir/src/Hello.cpp.obj] Error 1
make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/hello_headers.dir/all] Error 2
make: *** [Makefile:90: all] Error 2

报错中提示无法找到Hello.h文件,这时就需要引入CmakeLists中一个重要的关键字target_include_directories

引入target_include_directories

target_include_directories:让编译器识别不同的文件夹,主要用来为target指定包含头文件的目录。

因此,对于这个demo来说,我们可以在CmakeLists中加入target_include_directories

# cmake最低版本
cmake_minimum_required(VERSION 3.5)

# 项目名称
project (hello_headers)

# 创建一个SOURCES变量,设置为当前目录下的所有.cpp文件,方便使用
set(SOURCES
    src/Hello.cpp
    src/main.cpp
)

# 使用SOURCES变量中关联的cpp文件创建可执行文件hello_headers
add_executable(hello_headers ${SOURCES})

# 包含头文件的目录
target_include_directories(hello_headers
    PRIVATE 
        ${PROJECT_SOURCE_DIR}/include
)

重新cmake并make

.\hello_headers.exe
Hello Headers!

显示详情

当我们使用make时,控制台仅会输出百分比及完成状态,若想要显示更细致的内容可以添加VERBOSE=1

make VERBOSE=1 
posted @ 2023-09-21 00:26  小拳头呀  阅读(77)  评论(0编辑  收藏  举报