zoukankan      html  css  js  c++  java
  • SCons

    N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了。makefile确实编写复杂,而且平时也不是经常使用,容易忘记。偶识了scons,一切都变的简单了。最近研究了下scons,原来需要上百行的makefile编译过程,现在只需要十行不到,而且没有makefile那些繁杂的结构语法,完全使用python语言就可以进行编译脚本编写,非常好记忆和编译一些大的工程。

    直接使用apt-get install scons命令就可以完成安装,需要python环境。

    Scons命令

    scons:进行代码文件编译

    scons -Q:进行代码文件编译,不显示Scons内部操作打印的信息,只显示编译信息

    scons -c:清除编译中间文件和可执行文件

    Scons编译脚本

    Scons对应的编译脚本名称为SConstruct,就如同make对应的编译脚本为makefile

    SConstruct脚本编写

    编译函数

    Program():执行编译操作,生成可执行文件

    Library():执行编译操作,生成静态库

    StaticLibrary():执行编译操作,生成静态库

    SharedLibrary():执行编译操作,生成动态库

    Environment():编译环境

    编译参数

    target,生成的执行文件名字

    source,编译文件

    LIBS,依赖库

    LIBPATH,依赖库路径,有环境变量的可不添加,针对用户库或第三方库

    CPPPATH,头文件路径

    CCFLAGS,编译参数

    其他函数

    Split():将字符串分隔为列表

    Glob('*.cpp'):加入所有文件

    编译参数可以以任意顺序加入编译函数,编译函数依据编译参数对代码文件进行编译。

    一个简单例子

    将文件放在当前目录,头文件放在上级目录。

     

    1 str = Split('main.cpp display.cpp')
    2 Program('main',str,CPPPATH = '../'i,LIBS = 'pthread')

    一个复杂项目的例子

    大多项目都可以套用的格式,Program内参数多个文件需要以python列表形式作为入参,这里可以用Split对文件字符串分隔为列表输入。直接用Glob('*.cpp')包含当前目录所有需要编译的cpp文件。

    复制代码
     1 TARGETNAME = 'server'
     2   
     3 LIB = Split('jsoncpp logger ACE basetool tinyxml pthread dl rt')
     4 
     5 FILELIST = Glob('*.cpp')
     6  
     7 HEADFILEPATH = Split('../../common/include ../../3rd/ACE_wrappers ../../3rd/include/')
     8  
     9 LIB_DIR = Split('../../3rd/lib ../../common/lib')
    10  
    11 Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR)
  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/13228299.html
Copyright © 2011-2022 走看看