zoukankan      html  css  js  c++  java
  • 用premake编译跨平台opencv程序

    premake与cmake都是非常不错的跨平台编译系统,主要针对C++。记得老东家当年针对WIn+MacOS,使用的就是cmake (一开始维护两套编译脚本,非常痛苦),cmake不错,但使用了一套自定义的格式,对于程序员来讲,可能更喜欢使用lua作为meta data的premake,熟悉,灵活且可扩展。

    今天用opencv试了下编译opencv的example,感觉的确非常方便 - 你不用特别去了解VS或者gmake的格式/语法,就能通过一些简单的premake配置,产生project文件或者makefile,继而编译出你要的binary。

    premake的文档挺不错的,基本上,你可以:

    1. 首先,使用这个script编译你的第一个程序:http://industriousone.com/sample-script
    2. 然后,可以通读一遍:http://industriousone.com/scripting-premake, 了解configuration,platform, includedirs, libdirs, linking等重要概念
    3. 其他的,当然可以参考premake的reference:http://industriousone.com/scripting-reference

    然后,你就上手了:)

    关于在Win和Linux下配置OpenCV开发环境,这里有两篇可以参考:

    这边我用premake编译了opencv tutorials中的第一个display_image这个例子,下面是lua script:

     1 -- A solution contains projects, and defines the available configurations
     2 solution "display_image"
     3    configurations { "Debug", "Release" }
     4    platforms { "x32", "x64" }
     5  
     6    -- A project defines one build target
     7    project "display_image"
     8       kind "ConsoleApp"
     9       language "C++"
    10       files { "**.h", "**.cpp" }
    11       
    12       
    13      
    14       configuration "x64"
    15           if os.is("windows") then
    16             includedirs { "$(OPENCV_SDK_DIR)\\build\\include" }
    17             libdirs { "$(OPENCV_SDK_DIR)\\build\\x64\\vc9\\lib" }
    18             links { "opencv_core231", "opencv_highgui231", "opencv_imgproc231", "opencv_objdetect231" }
    19           elseif os.is("linux") then
    20             includedirs { "/usr/local/include" }
    21             libdirs { "/usr/local/lib" }
    22             links { "opencv_core", "opencv_highgui", "opencv_imgproc", "opencv_objdetect" }
    23           end
    24         
    25        configuration "x32"
    26           if os.is("windows") then
    27             includedirs { "$(OPENCV_SDK_DIR)\\build\\include" }
    28             libdirs { "$(OPENCV_SDK_DIR)\\build\\x86\\vc9\\lib" }
    29             links { "opencv_core231", "opencv_highgui231", "opencv_imgproc231", "opencv_objdetect231" }
    30           elseif os.is("linux") then
    31             includedirs { "/usr/local/include" }
    32             libdirs { "/usr/local/lib" }
    33             links { "opencv_core", "opencv_highgui", "opencv_imgproc", "opencv_objdetect" }
    34           end
    35     
    36       
    37       configuration "Debug"
    38          defines { "DEBUG" }
    39          flags { "Symbols" }
    40  
    41       configuration "Release"
    42          defines { "NDEBUG" }
    43          flags { "Optimize" } 
    44          
    45     

     例子的地址:https://github.com/lzprgmr/examples/blob/master/premake/display_image/premake4.lua

    一些解释:

    • 声明了两个configuration(debug/release)和platform(x32/x64),这样最后就能产生2*2=4个配置,这其实VC++中概念,但在linux下也同样适用
    • 针对不同的configuration或者platform进行设置,你可以通过在相应的configuration后进行 (是的,对platform也是如此)
    • 对于C++,最重要的配置自然是:includedirs, libdirs和links
    • 由于在windows或者linux下,其includedirs与libdirs肯定是不同的,我们可以通过os.is("windows")这个函数来区别

    好,下面来编译:

    Windows

    $ premake4 vs2008
    $ vcbuild display_image.vcproj "Debug|x64"

    命令行编译vcproj,其实还可以使用devenv和msbuild

    Linux

    $ premake4 gmake
    $ make help
    $ make config=release32 display_image

    如此,一个跨平台编译环境就搭好了,可以开始搞我的cvlab了。

  • 相关阅读:
    WPF学员管理系统
    dotnet-千星项目OpenAuthNet基于NetCore21的快速开发框架
    MVC5仓库管理系统
    华为设备IPC V200R002C0SPC SDK连接demo
    基础界面
    交通建设项目管理信息化系统
    Apache常见interview
    mamcached+(magent+keepalived高可用)搭建及理论概述
    TCP/IP三次挥手,四次断开(精简)
    简述FTP的主动模式与被动模式(精简)
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/2635466.html
Copyright © 2011-2022 走看看