美文网首页V语言
V语言学习笔记-25条件编译

V语言学习笔记-25条件编译

作者: lydiandy | 来源:发表于2020-05-20 00:28 被阅读0次

    条件编译

    目前主要针对不同平台,实现条件编译

    按照作者的说法,为了保持V的简单,不会加入预处理,但是支持条件编译

    目前的条件编译有2种主要方式:

    1.根据源文件名后缀来实现条件编译

    2.根据代码中的$if来实现条件编译

    源文件后缀名方式

    源文件后缀包含了2个维度的条件编译:

    • 通用源文件

      后缀名 编译条件
      只有 .v 所有操作系统,所有后端都参与编译
    • 操作系统(os)

      后缀名 编译条件
      _nix linux,unix,mac,solaris下才会参与编译,或者说是非windows
      _darwin mac下才会参与编译
      _linux linux下才会参与编译
      _solaris solaris下才会参与编译
      _windows windows下才会参与编译
      _bare 编译成裸机(metal)环境运行代码,才会参与编译,不进行排列组合
    • 编译器后端(backend)

      后缀名 编译器后端
      .c C语言为编译器后端时才会参与编译
      .js js语言为编译器后端时才会参与编译
      .x64 直接生成x64机器码时才会参与编译

      以上2个维度排列组合:

      file.v
      file_linux.c.v
      file_windows.c.v
      file_windows.js.v
      ...
      

    源代码中的$if方式

    $if windows {
        println('windows')
        $if msvc { //可以在windows平台中,进一步判断是msvc还是mingw
            
        }
        $if mingw { //可以在windows平台中,进一步判断是msvc还是mingw
            
        }
    }
    $if linux {
        println('linux')
    }
    $if macos {
        println('mac')
    }
    
    $if windows {
        
    } $else { //用来处理$if以外,其他平台的代码
        
    }
    $if !windows { //还可以使用!,取否
        
    }
    

    判断是否使用了-debug

    $if debug {
        println('from debug')
    }
    //执行:
    //v run main.v -debug
    

    判断平台是32位还是64位

    fn main() {
        mut x := 0
        $if x32 {
            println('system is 32 bit')
            x = 1
        }
        $if x64 {
            println('system is 64 bit')
            x = 2
        }
    }
    

    判断平台使用的字节序是小字节序,还是大字节序

    fn main() {
        mut x := 0
        $if little_endian { //小字节序
            println('system is little endian')
            x = 1
        }
        $if big_endian { //大字节序
            println('system is big endian')
            x = 2
        }
    }
    

    跨平台交叉编译

    编译器有一个选项-os用来编译生成指定平台的可执行文件

    目前可以是:linux, mac, windows, msvc

    v -os linux ./main.v
    

    相关文章

      网友评论

        本文标题:V语言学习笔记-25条件编译

        本文链接:https://www.haomeiwen.com/subject/hdwbohtx.html