为了账号安全,请及时绑定邮箱和手机立即绑定

使用相似的规则构建多个可执行文件

使用相似的规则构建多个可执行文件

C++
白衣染霜花 2019-11-20 10:41:09
我正在写一些类似C ++的交互式教程。本教程将由两部分组成:一个部分编译到一个库中(我正在使用Scons进行构建),另一部分(本课程)随该教程一起提供,由最终用户进行编译。我目前正在寻找一种简便易行的方法供人们学习这些课程。基本上,第二部分是一个目录,其中包含所有课程,每个课程都位于其自己的目录中。每节课至少有一个lesson.cpp和一个main.cpp文件,可能还有其他文件,这些文件的存在直到发行后我才知道,最终用户将创建这些文件。它看起来像这样:all_lessons/    helloworld/        lesson.cpp        main.cpp    even_or_odd/        lesson.cpp        main.cpp    calculator/        lesson.cpp        main.cpp        user_created_add.cpp其中的每一个都需要按照几乎相同的规则进行编译,并且编译命令应该可以从课程目录之一(helloworld/等)运行。看到该项目的其余部分是由Scons构建的,将其用于此部分也很有意义。但是,Scons SConstruct在其运行目录中搜索文件:将SConstruct文件放在每个课程目录中,再加上给出一般规则SConscript的all_lessons/目录中的文件,是否可以接受?这似乎与Scons期望组织项目的典型方式背道而驰:这种方法的潜在陷阱是什么?我可以放置一个SConstruct文件而不是SConscript文件,从而可以从这两个目录中进行构建吗(我猜测是使用导出以避免无休止的递归)?另外,我可能在某一时刻要替换lesson.cpp一个lesson.py生成所需的文件; Scons是否可以让我轻松地与建筑商一起使用,还是有一个更方便的框架?最后,我想得出以下结果(或等效于不同的构建系统):all_lessons/    SConstruct    helloworld/        SConstruct        lesson.cpp        main.cpp    even_or_odd/        SConstruct        lesson.py        main.cpp    calculator/        SConstruct        lesson.cpp        main.cpp        user_created_add.cppscons all在all_lessons目录中运行需要:运行even_or_odd/lesson.py生成even_or_odd/lesson.cpp。意识到user_created_add.cpp还需要编译。为每个课程生成一个可执行文件。scons在even_or_odd/,或scons even_or_odd中运行all_lessons/将产生与以上命令相同的可执行文件(相同的编译标志)。摘要:Scons是否适合/能够做到这一点?SConscript文件上方的SConstruct文件时,Scons是否工作正常?Scons是否可以很好地与SConstrcut一个项目的多个文件相互兼容?Scons构建器系统是否适合使用Python脚本生成C ++文件?使用其他构建系统/编写自己缺少的构建框架有什么优势吗?任何进一步的评论,当然是受欢迎的。谢谢。
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

从课程目录运行编译命令是否至关重要?如果没有,那么我将亲自创建具有以下内容的all_lessons / makefile:


lessons = helloworld even_or_odd calculator


all: $(lessons)


# for each $lesson, the target is $lesson/main built from $lesson/main.cpp and $lesson/lesson.cpp

# NB: the leading space on the second line *must* be a tab character

$(lessons:%=%/main): %/main: %/main.cpp %/lesson.cpp

   g++ -W -Wall $+ -o $@

然后,可以在all_lessons目录中使用“ make”或“ make all”构建所有课程,或者使用“ make helloworld / main”构建特定课程。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 524 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信