Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake add_executable()使用.cpp文件还是.hpp文件?_C++_Build_Cmake - Fatal编程技术网

C++ CMake add_executable()使用.cpp文件还是.hpp文件?

C++ CMake add_executable()使用.cpp文件还是.hpp文件?,c++,build,cmake,C++,Build,Cmake,我在这个网站上读到了很多关于CMake中add_executable函数用法的问题,但没有找到我困惑的确切答案 我的问题是为什么我们只在add_executable函数中添加.cpp文件,而不添加.hpp文件 我知道头文件就像对应的.cpp文件中函数和类的“索引”。但是如果我们没有将它们包括在add\u executable函数中,那么它们在构建过程中是如何使用的呢 例如,当另一个源文件导入A.hpp时,是否会使用A.hpp文件?但是A.hpp不在add\u executable函数中。。。程序

我在这个网站上读到了很多关于
CMake
add_executable
函数用法的问题,但没有找到我困惑的确切答案

我的问题是为什么我们只在
add_executable
函数中添加
.cpp
文件,而不添加
.hpp
文件

我知道头文件就像对应的
.cpp
文件中函数和类的“索引”。但是如果我们没有将它们包括在
add\u executable
函数中,那么它们在构建过程中是如何使用的呢

例如,当另一个源文件导入
A.hpp
时,是否会使用
A.hpp
文件?但是
A.hpp
不在
add\u executable
函数中。。。程序如何知道在哪里可以找到
A.hpp

谢谢

< P>头文件,通常有.h或.HPP扩展,虽然不是总是的,例如C++标准库头没有扩展——编译器“复制粘贴”到每个.CPP(或.c,或.cc),其中< <代码> >包含< /代码>指令以包含文件。

正因为如此,构建系统,比如CMake,在构建最终的可执行文件时不必知道它们——它们的内容已经通过将它们的代码直接包含到.cpp文件中来解释


但是,在指定依赖项时,生成系统需要了解这些文件,以确保在更新这些文件时重新生成整个应用程序,并为编译命令提供正确的包含路径。

感谢您的及时回复。这是否意味着为
.hpp
文件计算
#include
路径不是构建系统的工作?这是编译器的工作吗?@yuqli CMake通过“target_link_library”为其使用的一个或多个库提供的头文件找出包含路径,而编译器则为其他所有文件使用预定义的默认路径。但这与可执行文件的构建无关,所以这就是为什么
add\u executable
没有它的原因。