当前位置: 技术问答>linux和unix
我的makefile有什么问题
来源: 互联网 发布时间:2016-08-29
本文导语: 在当前目录下:有目录Lib,目录src,和makefile 目录lib下有 staticLib.H staticLib.C shareLib.C shareLib.H staticLib.H 和 shareLib.H 内容一样,都是: #ifndef _STATIC_LIB_H__ #define _STATIC_LIB_H__ char* getSubStr(char *pSrc, char *pSub); #endif...
在当前目录下:有目录Lib,目录src,和makefile
目录lib下有 staticLib.H staticLib.C shareLib.C shareLib.H
staticLib.H 和 shareLib.H 内容一样,都是:
#ifndef _STATIC_LIB_H__
#define _STATIC_LIB_H__
char* getSubStr(char *pSrc, char *pSub);
#endif
staticLib.C 和 shareLib.C 都是实现getSubStr函数的。
目录src下有:testStatic.C 和 testShare.C
两个文件除了包含的头文件不一样,其它都一样:
#include
#include
#include "staticLib.H"
int main(int argc, char **argv)
{
fprintf(stdout, "This is a test for static libn please input a text string:n");
char buf[128]= {0};
fscanf(stdin,"%s", buf);
char *pattern = "tanzh";
while(0 != strcmp(buf, "exit"))
{
char *pSub = 0;
if ((pSub = getSubStr(buf, pattern)) != 0)
fprintf(stdout, "Find result %s:n", pSub);
}
return 0;
}
我的makefile内容:
VPATH=./lib
libtarget:libmystatic libmyshare testshare teststatic
testshare:./src/testShare.C
g++ -L./ -lmyshare ./src/testShare.C -I ./lib -o $@
teststatic:./src/testStatic.C libmystatic
g++ -static -L./ -lmystatic -I ./lib/ ./src/testStatic.C -o $@
libmystatic:staticLib.o
ar cr libmystatic.a staticLib.o
staticLib.o: staticLib.C staticLib.H
g++ -c ./lib/staticLib.C -o staticLib.o
libmyshare:shareLib.o
g++ -shared -fPCI -o libmyshare.so shareLib.o
sharelib.o:sharelib.C sharelib.H
g++ -c -o $@ sharelib.C
PHONY:clean
clean:
-rm *.o *.a *.so
运行make 会出错:
大概是 undefined reference to getSubStr(char *, char *)
谁帮我看看哪儿出错了?
另外我还有问题:
VPATH设置的搜索目录对于命令也有效吗? 还是只是对于依赖那一行。
我感觉VPATH好像对这一行无效g++ -c ./lib/staticLib.C -o staticLib.o,所以我写了./lib
而对g++ -c -o $@ sharelib.C有效。
且我这VPATH好像不能设置多个目录。
目录lib下有 staticLib.H staticLib.C shareLib.C shareLib.H
staticLib.H 和 shareLib.H 内容一样,都是:
#ifndef _STATIC_LIB_H__
#define _STATIC_LIB_H__
char* getSubStr(char *pSrc, char *pSub);
#endif
staticLib.C 和 shareLib.C 都是实现getSubStr函数的。
目录src下有:testStatic.C 和 testShare.C
两个文件除了包含的头文件不一样,其它都一样:
#include
#include
#include "staticLib.H"
int main(int argc, char **argv)
{
fprintf(stdout, "This is a test for static libn please input a text string:n");
char buf[128]= {0};
fscanf(stdin,"%s", buf);
char *pattern = "tanzh";
while(0 != strcmp(buf, "exit"))
{
char *pSub = 0;
if ((pSub = getSubStr(buf, pattern)) != 0)
fprintf(stdout, "Find result %s:n", pSub);
}
return 0;
}
我的makefile内容:
VPATH=./lib
libtarget:libmystatic libmyshare testshare teststatic
testshare:./src/testShare.C
g++ -L./ -lmyshare ./src/testShare.C -I ./lib -o $@
teststatic:./src/testStatic.C libmystatic
g++ -static -L./ -lmystatic -I ./lib/ ./src/testStatic.C -o $@
libmystatic:staticLib.o
ar cr libmystatic.a staticLib.o
staticLib.o: staticLib.C staticLib.H
g++ -c ./lib/staticLib.C -o staticLib.o
libmyshare:shareLib.o
g++ -shared -fPCI -o libmyshare.so shareLib.o
sharelib.o:sharelib.C sharelib.H
g++ -c -o $@ sharelib.C
PHONY:clean
clean:
-rm *.o *.a *.so
运行make 会出错:
大概是 undefined reference to getSubStr(char *, char *)
谁帮我看看哪儿出错了?
另外我还有问题:
VPATH设置的搜索目录对于命令也有效吗? 还是只是对于依赖那一行。
我感觉VPATH好像对这一行无效g++ -c ./lib/staticLib.C -o staticLib.o,所以我写了./lib
而对g++ -c -o $@ sharelib.C有效。
且我这VPATH好像不能设置多个目录。
|
感觉你的依耐关系比较混乱的,估计有问题
testshare:./src/testShare.C
要改为:
testshare:./src/testShare.C libmyshare
只要依耐关系对了,库的路径指定对了,应该不会报错的。
testshare:./src/testShare.C
要改为:
testshare:./src/testShare.C libmyshare
只要依耐关系对了,库的路径指定对了,应该不会报错的。