当前位置: 首页 > news >正文

做网站收费 优帮云合肥网站建设优化

做网站收费 优帮云,合肥网站建设优化,东莞公司网站做优化,河南做网站公司排名1.需求 [1].使用第三方动/静太库 [2].本身代码部分编译为动/静态库 [3]多项目管理 2.构建一个单独的项目 [1]目的:这个项目将生成可执行文件,动态和静态库。 先在workspace(or anywhere you like)下建立项目的目录(文件)结构: workspace |—— Hel…

1.需求

[1].使用第三方动/静太库

[2].本身代码部分编译为动/静态库

[3]多项目管理


2.构建一个单独的项目

[1]目的:这个项目将生成可执行文件,动态和静态库。

先在workspace(or anywhere you like)下建立项目的目录(文件)结构:

workspace

        |—— HelloWorld

                            |—— CMakeLists.txt

                            |—— include     Hello.h

                            |—— src             Hello.cpp, test.cpp, CMakeLists.txt

                            |—— build          (CMake外部构建时的使用的目录, 可任意指定)

 [2]HelloWorld根目录下的CMakeLists.txt
view plain

    # 声明CMake的最低要求版本  
    cmake_minimum_required(VERSION 2.8) 
    # 定义项目(工程)名称,  
    # 同时定义了以下默认变量:  
    # PROJECT_SOURCE_DIR 或 HELLO_SOURCE_DIR, 代指CMake开始构建的根目录(通常是项目根目录)  
    # PROJECT_BINARY_DIR 或 HELLO_BINARY_DIR, 代指CMake的编译目录(即执行cmake命令的目录)  
    PROJECT(HELLO)  
    # 添加参与编译的子目录  
    ADD_SUBDIRECTORY(src)  

[3]Hello.h

#ifndef HELLO_H   #define HELLO_H   class Hello   {   public:       Hello(){}       void sayHello();   };   #endif  

[4]Hello.cpp

    #include <iostream>  
    #include "Hello.h"  
    void Hello::sayHello()  
    {  
        std::cout << "Hello CMake!" << std::endl;  
    }  

[5]test.cpp

    #include "Hello.h"  
    int main(int arg, char** argv)  
    {  
        Hello h;  
        h.sayHello();  
    }  

[6]src 下的CMakeLists.txt

    # 添加头文件的查找目录  
    INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)  
    ## 生成各种目标(target)文件: 可执行文件、动态库、静态库  
    # 指定可执行文件的输出目录,输出到bin下面  
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)  
    # 指定可执行文件名(hello)和相关源文件   
    ADD_EXECUTABLE(hello test.cpp Hello.cpp)  
    # 指定库文件输出路径  
    SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)  
    # 生成动态库  
    # 注意,前面已经使用target文件名hello,这里不能再用。  
    ADD_LIBRARY(hello_so SHARED Hello.cpp)  
    # 设置库输出名为 hello => libhello.so  
    SET_TARGET_PROPERTIES(hello_so PROPERTIES OUTPUT_NAME "hello")  
    # 生成静态库  
    # 注意,前面已经使用target文件名hello,这里不能再用。  
    ADD_LIBRARY(hello_a STATIC Hello.cpp)  
    # 设置输库出名为 hello => libhello.a  
    SET_TARGET_PROPERTIES(hello_a PROPERTIES OUTPUT_NAME "hello")  

最后,进入build目录执行命令: cmake <项目根目录>

如果执行cmake命令的目录与项目根目录相同,称为内部编译,这时CMake生成的中间文件会与项目代码混合,不推荐。

否则,称为外部编译,所有中间文件会生成在执行cmake命令的目录下。

cmake执行完后,会生成Makefile, 直接make, 会在项目下生成bin和lib目录及目标文件。

view plain

    cmake ..  
    make  

 

通常我们不需要生成所有类型的目标文件,构建时根据需要选择。

3. 构建多个项目,使用外部项目提供的库文件。

在前面的HelloWorld项目中,生成了lib文件,就可以通过头文件和lib文件发布给其他项目了。

我们创建一个Test项目来使用HelloWorld的生成的库,如下:

workspace

       |—— HelloWorld

       |—— Test

                     |—— CMakeLists.txt

                     |—— src        main.cpp CMakeLists.txt

                     |—— build

(1)Test目录下的CMakeLists.txt

view plain

    cmake_minimum_required(VERSION 2.8)  
    PROJECT(TEST)  
    ADD_SUBDIRECTORY(src)  

2) main.cpp

view plain

    #include "Hello.h"  
    int main(int arg, char** argv)  
    {  
        Hello h;  
        h.sayHello();  
    }  

(3) src下的CMakeLists.txt

view plain

    # 显示系统的HOME环境变量的值  
    MESSAGE(STATUS $ENV{HOME})  
    # 指定头文件查找目录  
    # 注意,这里指定绝对路径。  
    INCLUDE_DIRECTORIES($ENV{HOME}/workspace/HelloWorld/include)  
    # 指定库文件查找目录(不能只指定头文件,也需要连接到库文件)  
    # 注意,这里指定绝对路径, 也可通过设置系统环境变量LD_LIBRARY_PATH来指定。  
    LINK_DIRECTORIES($ENV{HOME}/workspace/HelloWorld/lib)  
    # 生成可执行文件到项目的bin目录  
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)  
    ADD_EXECUTABLE(main main.cpp)  
    # 制定链接的外部Lib  
    TARGET_LINK_LIBRARIES(main libhello.a)  

 

最后,进入build目录执行:

view plain

    cmake ..  
    make  

 

到bin目录下测试可执行文件:

view plain

    $ ./main   
    $ Hello CMake!


3.  在多个项目的情况下,使用自定义的Find<ProjName>.cmake模块

在workspace下增加两个目录(项目),CMakeModules和TestFindModule如下:

workspace

        |—— HelloWorld

        |—— Test

        |—— CMakeModules    FindHELLO.cmake   (存放各子项目的Find<Proj>.cmake 定义)

        |—— TestFindModule    ( 功能同Test子项目,不过使用Find<>.cmake模块来查找、链接HelloWorld项目的头文件和库)

                                |—— CMakeLists.txt

                                |—— src    main.cpp,  CMakeLists.txt

                                |—— build

(1)CMakeModules目录下的FindHELLO.cmake

MESSAGE(STATUS $ENV{HOME}/workspace/HelloWorld)
FIND_PATH(HELLO_INCLUDE_DIR Hello.h $ENV{HOME}/workspace/HelloWorld/include)


#FIND_LIBRARY(HELLO_LIBRARY NAMES hello PATHS $ENV{HOME}/workspace/HelloWorld/lib)
FIND_LIBRARY(HELLO_LIBRARY hello $ENV{HOME}/workspace/HelloWorld/lib)


IF (HELLO_INCLUDE_DIR)
  MESSAGE(STATUS "FOUND HELLO.H  ${HELLO_INCLUDE_DIR}")
ENDIF (HELLO_INCLUDE_DIR)


IF (HELLO_LIBRARY)
  MESSAGE(STATUS "FOUND HELLO LIB  ${HELLO_LIBRARY}")
ENDIF (HELLO_LIBRARY)


IF (HELLO_INCLUDE_DIR AND HELLO_LIBRARY)
  SET(HELLO_FOUND TRUE)
ENDIF (HELLO_INCLUDE_DIR AND HELLO_LIBRARY)


IF (HELLO_FOUND)
  IF (NOT HELLO_FIND_QUIETLY)
    MESSAGE(STATUS "Found Hello: ${HELO_LIBRARY}")
  ENDIF (NOT HELLO_FIND_QUIETLY)
ELSE (HELLO_FOUND)
  IF (HELLO_FIND_REQUIRED)
    MESSAGE(FATAL_ERROR "Could not find hello library")
  ENDIF (HELLO_FIND_REQUIRED)
ENDIF (HELLO_FOUND)

(2)TestFindModule目录下的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
PROJECT(TEST)
# CMAKE_MODULE_PATH定义必须放到前面
SET(CMAKE_MODULE_PATH $ENV{HOME}/workspace/CMakeModules)
#MESSAGE(STATUS $ENV{HOME}/workspace/CMakeModules)
ADD_SUBDIRECTORY(src)

(2) TestFindModule目录src下的main.cpp

#include <Hello.h>
int main(int arg, char** argv)
{
    Hello h;
    h.sayHello();
}


(3) TestFindModule目录src下的CMakeLists.txt

# FIND_PACKAGE(<name>) 用来调用预定义在 CMAKE_MODULE_PATH 下的 Find<name>.cmake 模块
FIND_PACKAGE(HELLO)
IF (HELLO_FOUND)
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    ADD_EXECUTABLE(hello main.cpp)
    INCLUDE_DIRECTORIES(${HELLO_INCLUDE_DIR})
    TARGET_LINK_LIBRARIES(hello ${HELLO_LIBRARY})
ENDIF (HELLO_FOUND)

最后,进入build目录执行:

cmake ..

make

 

到bin目录下测试可执行文件:

$ ./main  

$ Hello CMake!  
---------------------  
作者:shuyong1999  
来源:CSDN  
原文:https://blog.csdn.net/shuyong1999/article/details/7108563  
版权声明:本文为博主原创文章,转载请附上博文链接!

http://www.lbrq.cn/news/2640601.html

相关文章:

  • 网站建设进度公司搭建网站
  • 运营网站费用企业培训心得
  • 建设银行网站怎么短信转账软文发布软件
  • 兰州做网站哪家专业好用的搜索引擎
  • 网站建设商家宁波seo费用
  • 土木毕业设计代做网站优化营商环境发言材料
  • dede网站主页打不开网站服务器失去响应
  • 足球梦网站建设的基本思路东莞seo推广机构帖子
  • 什么可以用手机做网站上海seo顾问推推蛙
  • 互联网保险的典型案例电商seo是什么意思
  • html网站建设实例教程企业网站托管
  • 柳州在哪里做网站潍坊网站建设优化
  • 长春做网站哪家公司好网络营销技巧
  • 天猫做网站广州宣布5条优化措施
  • 做网站的私活排名怎么优化快
  • 武汉政府网站建设企业网站的推广方式和手段有哪些
  • 本地南京网站建设小红书seo排名帝搜软件
  • 广东网站建设公司报价昆明网络推广公司排名
  • 有限责任公司和股份有限公司成都百度推广和seo优化
  • 易企秀可以做网站吗杭州网站优化咨询
  • 酒仙网的网站推广方式免费b站推广入口2023
  • 营销网站建站公司站内关键词排名优化软件
  • 天水网站制作网络营销课程报告
  • 苏州手机网站建设东莞疫情最新通告
  • 怎么做网站链接的快捷方式百度号码认证平台官网首页
  • 广州市城乡建设委员会网站苏州疫情最新消息
  • 网站建设服务百度一下首页官网
  • 做网站需要备案几次什么是seo
  • 网站推广营销的意义网店运营的工作内容
  • 谁可以帮我做网站安年软文网
  • kettle插件-kettle MinIO插件,轻松解决文件上传到MinIO服务器
  • 华为USG防火墙双机,但ISP只给了1个IP, 怎么办?
  • 控制建模matlab练习13:线性状态反馈控制器-②系统的能控性
  • 自适应反步控制:理论与设计
  • jetson上使用opencv的gstreamer进行MIPI和USB摄像头的连接以及udp推流
  • 鸿蒙网络编程系列61-仓颉版基于TCP实现最简单的HTTP服务器