Linux下怎么编译不同文件夹下的代码

cobra_chen 2011-01-11 04:23:17
/CommFile/demo.cpp
/CommFile/demo.h
/CommFile/header.h

/Desk/desk.cpp
/Desk/desk.h

用G++怎么编写Makefile
...全文
145 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
OK。
THS

[Quote=引用 12 楼 justkk 的回复:]
也许你的make不支持VPATH,试试这样:

HTML code
tt:11/demo.o 22/desk.o
g++ -o$@ demo.o desk.o
.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I11 -I22 $<
[/Quote]
justkk 2011-01-11
  • 打赏
  • 举报
回复
也许你的make不支持VPATH,试试这样:
tt:11/demo.o 22/desk.o
g++ -o$@ demo.o desk.o
.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I11 -I22 $<
justkk 2011-01-11
  • 打赏
  • 举报
回复
我的make版本GNU Make 3.81
justkk 2011-01-11
  • 打赏
  • 举报
回复
不会有这么大差异吧
我的是suse64 2.6

另外,你的make有问题吧,看提示:
make: *** No rule to make target 'demo.o', nedded by 'tt'. Stop

自己的提示信息都有错别字,哈
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
难道我们的环境不一样?
我用的是红帽子6.0
[Quote=引用 8 楼 justkk 的回复:]
# ls -R 11 22
11:
demo.cpp demo.h header.h

22:
desk.cpp desk.h
# cat makefile
VPATH=.:11:22

tt:demo.o desk.o
g++ -o$@ demo.o desk.o

.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I11 -I22 $<
……
[/Quote]
justkk 2011-01-11
  • 打赏
  • 举报
回复
# ls -R 11 22
11:
demo.cpp demo.h header.h

22:
desk.cpp desk.h
# cat makefile
VPATH=.:11:22

tt:demo.o desk.o
g++ -o$@ demo.o desk.o

.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I11 -I22 $<

# make
g++ -c -I11 -I22 11/demo.cpp
g++ -c -I11 -I22 22/desk.cpp
g++ -ott demo.o desk.o
# ./tt
This is a test demo.
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
VPATH=.:/CommFile:/Desk

tt:demo.o desk.o
g++ -o$@ demo.o desk.o

.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I/CommFile -I/Desk $<


提示
make: *** No rule to make target 'demo.o', nedded by 'tt'. Stop.[Quote=引用 6 楼 justkk 的回复:]
我刚试过,是可以的
上面的makefile中有一处笔误,把其中的gcc换成g++

我用相对路径11 模拟你的/CommFile
用相对路径22 模拟你的/Desk
makefile在当前路径下,编译通过。
[/Quote]
justkk 2011-01-11
  • 打赏
  • 举报
回复
我刚试过,是可以的
上面的makefile中有一处笔误,把其中的gcc换成g++

我用相对路径11 模拟你的/CommFile
用相对路径22 模拟你的/Desk
makefile在当前路径下,编译通过。
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
/CommFile/demo.h
#define DEMO_CODE 8999

/CommFile/header.h
#define TEST_STR "String from header file.\n"

/CommFile/demo.cpp
#include <stdio.h>
#include "header.h"
#include "demo.h"

void Test()
{
printf("Test in CommFile.");
printf("%d -> %s\n" ,DEMO_CODE ,TEST_STR);
}


/Desk/desk.h
#define DESK_CODE 9999
#include <stdio.h>
/Desk/desk.cpp
#include "desk.h"
#include "header.h" //这样可以引用到/CommFile/header.h的宏?
int main( void )
{
printf("This is a test demo.\n");

return 0;
}
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
>make
make: *** No rule to make target 'demo.o', nedded by 'tt'. Stop.


[Quote=引用 1 楼 justkk 的回复:]
HTML code
VPATH=.:/CommFile:/Desk

tt:demo.o desk.o
gcc -o$@ demo.o desk.o

.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I/CommFile -I/Desk $<
[/Quote]
justkk 2011-01-11
  • 打赏
  • 举报
回复
不用指定路径,直接#include "header.h"
cobra_chen 2011-01-11
  • 打赏
  • 举报
回复
如果我在desk.cpp里要包含 /CommFile/header.h怎么办?
justkk 2011-01-11
  • 打赏
  • 举报
回复
VPATH=.:/CommFile:/Desk

tt:demo.o desk.o
gcc -o$@ demo.o desk.o

.SUFFIXES:.cpp .o
.cpp.o:
g++ -c -I/CommFile -I/Desk $<

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧