免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2708 | 回复: 2
打印 上一主题 下一主题

一个困扰了我很久的SCONS的问题,大家帮忙看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-29 15:10 |只看该作者 |倒序浏览
一直想用scons代替make重新构建项目,因为python写起来比makefile要好用的多,但一个问题一直困扰我,没办法用起来,大家帮忙看看有没有办法解决。

    我们所使用的开发环境都是通过cifs方式把windows的目录挂载到linux服务器上进行代码编译的,有一个硬性的要求,就是编译的中间文件.o和生成的可执行文件.bin不能生成在挂载目录下(为了安全,挂载的目录通常不开写权限的)。
   
    这也就要求socs能实现代码和编译生成的文件分离,即我通过Linux的服务器进入到挂载的目录编译,生成的中间文件和可执行文件能产生在挂载目录以外的目录,比如:挂载目录为/home/user/mnt,中间文件和可执行文件打算生成到/home/user/objs/。

   通过多次试验只能实现把中间文件生成到/home/user/objs/目录,可执行文件怎么也生成不了。下面是我所做的测试:


目录结构:
/home/user/test/
               SConstruct
               hello.c

hello.c内容:
#include <stdio.h>

int main(void)
{
    printf("hello\n");
    return 0;
}

SConstruct内容:
import os
env=Environment(ENV = os.environ)
VariantDir('/home/user/objs/', './', duplicate=0)
env.Program('/home/user/objs/hello', '/home/user/objs/hello.c')

cd到/home/user/test/执行scons结果是:
可以生产/home/user/objs/hello.o
无法生成/home/user/objs/hello

如果改成env.Program('hello', '/home/user/objs/hello.c')
就可以在当前目录(/home/user/test)生成hello

我如何才能在/home/user/objs/下生成hello呢?

论坛徽章:
0
2 [报告]
发表于 2012-09-29 22:02 |只看该作者
额,按你写的,我怎么在目标文件夹生成了执行文件,中间文件留在了当前文件夹

论坛徽章:
0
3 [报告]
发表于 2012-10-08 16:10 |只看该作者
上面描述有误,按我上面这个是可以的,如果写成这样就不行了:
目录结构:
/home/user/test/
                SConstruct
               src/hello.c

hello.c内容:
#include <stdio.h>

int main(void)
{
     printf("hello\n");
     return 0;
}

SConstruct内容:
import os
env=Environment(ENV = os.environ)
VariantDir('/home/user/objs/','./src/',duplicate=0)
env.Program('/home/user/objs/hello', '/home/user/objs/hello.c')
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP