总结1
C++工程中的源码组成
1、文件类型
1.1 头文件(.h)——放置各种声明,用于被cpp文件包含;
头文件的存在是为了联系多个源文件,是源文件之间的接口。C++与C一样,要求先声明后使用,可是编译的时候是单文件编译的。在头文件里主要写一些函数、数据(包括数据类型的定义)、等的声明,这样可以在多个.c或.cpp文件内共享这些函数、数据。
1.2 模块文件或库文件(.cpp)——放置一些函数定义,又称功能模块或代码文件;
通过将库文件编译成.so或者.a文件,这样只需提供.so或者.a以及头文件就可以方便其他人调用库文件中的函数了;编译的方式有可以用g++(编译.so文件)或者cmake(编译.so文件)的方式。
1.3 主程序文件(.cpp)——包含main()的文件,程序入口,调用模块文件实现的方法。
在源文件中需要#include头文件,然后就可以调用库文件中的函数了。最后,把main.cpp和.so文件编译成可执行文件。
总结2
除了包含main()函数外的.cpp文件(模块文件或库文件),需要做链接,否则报错 ”此文件不属于任何项目,代码功能可能无法正常工作“
原因:
没有将该头文件链接到整个工程中,众所周知,C语言或者C++语言的源程序必须经过编译和链接操作后才可以变成计算机可以处理的二进制可执行文件。其中,编译是指根据用户所写的源代码程序,将高级语言(比如C语言)转换成电脑能读懂的汇编代码,这一步操作一般会由编译器完成;链接是指,经过编译后将会产生一个目标文件,这个目标文件可能会调用一些函数(比如printf函数),它的目标代码在系统的函数库中,链接所要做的就是将这些函数库中的代码组合到目标文件中去[1]。
解决方法:
在CMakeLists.txt的add_executable中添加相应的头文件xxx.cpp
或者,新建源文件时,勾选链接到工程选项。