target_include_directories设定头文件目录时,需要用PRIVATE,INTERFACE,PUBLIC修饰符指定范围。
这三个修饰符的主要区别为:
PRIVATE:只有当前的targe会使用的头文件,不会导出到外面。
INTERFACE:当前的target不需要使用的头文件,但是需要导出到外面,供外面使用。
PUBLIC:当前target和外面都会使用的头文件。
举个例子进行说明:
程序目录结构为:
├── add_func
│ ├── CMakeLists.txt
│ ├── include
│ │ ├── interface
│ │ │ └── add_interface.h
│ │ ├── private
│ │ │ └── add_private.h
│ │ └── public
│ │ └── add_public.h
│ └── src
│ └── add.cpp
├── build
├── CMakeLists.txt
├── install
└── main.cpp
//add_func/include/private/add_private.h
//通过类Add完成加法,但是该类不会暴露出去
class Add
{
public:
Add(int p1, int p2);
int getRes();
private:
int m_res;
};