在Linux下要编译一个C/C++程序,首先要知道包含目录的作用,对C/C++有了解的就会知道,#include是包含头文件所用的,也就说说部分类、函数、或者变量声明就在其中。而#include宏定义又有两种:
#include""和#include <>
这两个语句的差别在于查找文件的方式,#include""是在当前目录下查找,若是找不到再跳到系统目录,而#include<>则是直接在系统目录查找,而不会去当前目录寻找。(若是在系统中而#include <>找不到则可以通过vi /etc/profile 添加环境变量,找到文件所在目录,并且在profile下添加类似如下的语句export PATH = "$PATH: /opt/bin",记住,编辑完之后必须使用source /etc/profile 命令让你的编辑立马生效,否则你就要等到重启之后才能生效了)
由于暂时不会写makefile文件,所以我们就只好在.c/.cpp文件的宏定义中添加头文件,记得要带上目录,如
#include "inc/opencv.h" 或是 #include "opencv.h"
#include后面的路径是相对你.c/.cpp文件而言的,同时要记住#include ""是不能访问上一层目录的,也就是不能使用类似#include "../"的命令。
测试过后发现并不是没法访问,只是因为我gcc不太会,加上-I(大写i)即可
[root@root test]# gcc -I ../xx main.c blog.c -o main (blog.h文件在../xx/blog.h)
[root@root test]# ls
add.c add.h blog.c main main.c Makefile mul.c mul.h sub.c sub.h test.c
[root@root test]# ./main
0
hello[root@root test]#
确定好.c/.cpp/.h/.hpp文件所在目录以及#include宏定义没有错误之后,就可以直接使用命令进行编译,如
root@root#ls inc main Sales_item.cpp root@root#ls inc/ Sales_item.h root@root#cat Sales_item.cpp #include <iostream> #include "inc/Sales_item.h" int main() { Sales_item item1,item2; std::cin>>item1>>item2; std::cout<<item1 + item2 <<std::endl; return 0; } root@root#g++ Sales_item.cpp -o my_execute_name root@root#ls inc main my_execute_name Sales_item.cpp
C++使用g++ youfilename1.c youfilename2.c -o executefilename
C则将g++换成gcc就好,-o是指定输出文件名,可以添加多个.c/.cpp文件。
如果你的程序代码中没有#include 宏定义,则可以使用 g++ file.c -l inc/file.h -o executefilename
-l参数后加的是文件路径以及文件名。如果想要对g++、gcc有更多的了解,可以使用
man gcc 空格换页,q退出,上下按键都能用root@root#man gcc