一 错误记录
(1) g++ 输出 *.o: file not recognized: 不可识别的文件格式,而且对应的输出文件超级大:
原因可能是你使用g++编译了 [*.hpp] 文件。
二 用法记录
(1) notdir :
用途: 去掉文件列表中每个文件的路径
用法举例: $(notdir $(wildcard .c ./xpp/.cpp ) )
(2)wildcard :
用途:搜索指定位置符合条件的文件,返回结果列表
用法举例 : $(wildcard *.c ./xpp/*.cpp ),表示搜索当前目录中后缀名为 .c 以及子目录 xpp 中后缀名为 .cpp 的所有 文件。
(3) g++ 参数说明
以一条语句说明解释之:g++ -std=c++11 -o Main $(OBJ) -lgsl -lgslcblas -L libs/ -static -I $(includes)
-std=c++11:编译特性;
-o:告诉g++后面是要输出的文件 (-c 则表示只进行编译输出 目标文件,不进行链接)
$(OBJ) : g++的输入文件,应该是一系列的目标文件;
-lgsl :表明要使用库 gsl.a 或 gsl.so ;
-L libs/ : 指定g++搜索库的目录,实际上就是gsl、gslcblas 所在的目录,此处为libs/;
-I : 指定g++头文件搜索目录。
(4) ldd MAIN:
查看可执行程序MAIN是否成功地链接到动态库文件 。
三、Linux 编译项目经验
编写源代码时养成良好的习惯,可以节约不少力气。用惯了Window 下的强大人性化的IDE,将代码迁移到Linux下时会遇到一系列代码编写问题。
1 头文件和源文件必须分开,这样便于以后编译或者编译成库发布。
2 函数的实现最好不要写在头文件中,不要随手写在包含类声明的头文件中。