migration - 有没有工具可以帮助从 make 迁移到 waf?

标签 migration makefile waf

我希望使用 make 迁移一个大型项目使用 waf .是否有任何工具可以在某种程度上帮助自动化该过程?

最佳答案

不,没有,但迁移并没有那么复杂。

如果您以前从未使用过 waf,请查看 demos/ 中的示例。文件夹( c 是典型的),并消化 waf书 .

然后,从make到waf:

  • 在配置步骤中,由 configure() 实现函数,实例化所需的高级工具并在可能的情况下使用高级工具定义与外部库的关系(例如 check_cfg() 句柄 pkg-config(1) )或退回定义 {DEFINES,INCLUDE,LIB,...}_$LIBNAME ,例如:

  • def configure(cfg):
        # I want to do C with any available compiler
        cfg.load("compiler_c") # will detect MSVC, GCC, or other common compilers
    
        # always include cwd
        cfg.env.INCLUDES += ['.']
    
        # I want to link all my programs with pthread
        cfg.env.LIB += ['pthread']
    
        # I want to link with static zlib
        cfg.env.STLIB_Z += ['z']
    
        # I want to use pkg-config to tell me how to link with pjsip
        # and avoid typing the risky -DPJ_AUTOCONF=1 -pipe -O2 -march=k8-sse3 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mno-avx -mno-sse4.2 -mno-sse4.1 --param l1-cache-size=64 l1-cache-line-size=64 l2-cache-size=512 -mtune=k8 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -I/home/portage/tmp/net-libs-pjsip-1.12/image//usr/include  -L/home/portage/tmp/net-libs-pjsip-1.12/image//usr/lib -lpjsua -lpjsip-ua -lpjsip-simple -lpjsip -lpjmedia-codec -lpjmedia -lpjmedia-audiodev -lpjnath -lpjlib-util -lresample -lmilenage -lsrtp -lg7221codec -lpj -lm -luuid -lnsl -lrt -lpthread -lasound -lcrypto -lssl -lopencore-amrnb
        # the *_PJSIP variables will be created
        cfg.check_cfg(package='libpjproject',
                      uselib_store='PJSIP',
                      args='--libs --cflags',)
    

    避免使用 *FLAGS如果可能,因为它们是特定于编译器的。
  • 用高级规则替换标准的 makefile 规则(使用在 configure() 中实例化的工具),例如。

  • bld(target='mylib',
        features='c', # see note
        source=['a.c', 'b.c'],
        use=['Z', 'PJSIP'],
        )
    
    bld(target='name',
        features='c cprogram',
        source=['main.c'],
        use=['mylib'],
        )
    
  • 如果需要,可以创建非标准规则和高级工具,参见waf book

  • 总体而言,构建脚本将比 makefile 更短且更易于阅读。
    它们更加线性,并且它们的内容更加语义化。

    请注意,如果您不打算导出静态库,则不需要创建它们。
    waf 工具不使用 shell 来调用程序,因此命令行长度限制(创建内部静态库的主要原因)不是问题。

    关于migration - 有没有工具可以帮助从 make 迁移到 waf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068121/

    相关文章:

    build - 如何声明测试脚本对构建程序的WAF依赖?

    javascript - TypeScript 可以与现有的 JavaScript 代码一起使用吗?

    makefile - caffe 重新编译时出现 -fPIC libglog.a 错误

    python - Waf,添加手动依赖项时遇到问题

    linux - 在 linux 内核构建期间删除不必要的驱动程序

    android-ndk: stoi/stof/stod/to_string 不是 'std' 的成员

    c++ - 将 NS3 返回/退出代码(通过 waf)捕获为 Bash 脚本中的变量

    ruby-on-rails - Rails 迁移中的方法名称

    sql - MySQL:将查询从 v4 迁移到 v5

    python - 正则表达式从 Perl 到 Python 的翻译