Bootstrap

C++(1)-ubuntu-CMake-外部构建项目

开发一个项目,最终总要输出一个可执行文件或者共享库,这时通过编译CMakeLists.txt来完成。
CMake就做了这件事。
本文以hello为例从构建工程,到安装helloWord为止。
1.构建文件目录的tree
2.文件编写
   2.1.cpp文件
   2.2.CMakeLists.txt  -> cmake .(Makefile) ->make(hello)
3.安装 
4.CMAKE语法

 


1.构建文件目录的tree

1.1工程目录
     1.1.1根目录
       CMakeLists.txt   
       安装文件:相对路径,前面会调用:
CMAKE_INSTALL_PREFIX(默认/usr/local)
       安装脚本:runhello.sh 在根目录下;bin:/usr/local/bin
       安装目录:要加/
       

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin)
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/)
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake)


  1.1.2 子目录src:  工程源码,各种cpp + CMakeLists.txt
       CMakeLists.txt

ADD_EXECUTABLE(hello main.cpp)


    1.1.3. 子目录build: 过程文件
         创建文件夹并在此文件夹下运行cmake make 后自动创建bin目录生成二进制的hello文件。
    
       

mkdir build
cd build    #到build下编译
cmake ..    #把编译的文件放在      BINARY 路径: /build   生成Makefile
                                  #SOURCE 路径:原路径
make                              #此时都是在build目录下
cd bin
./hello

    

              添加  目录 输出
   ADD_SUBDIRECTORY(src bin)
   ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
             更改
   SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
   SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)



2.文件编写
   2.1.cpp文件
         

#main.cpp

#include <iostream>

int main(){
std::cout <<  "hello word" << std::endl;
}


   2.2.CMakeList.txt  得到makefile
     语法:
      1.工程文件名(HELLO)和输出文件名(hello)无关。
      2.参数用“空格”或者“;”分割 .cpp
      3.读变量&()
      4.指令全大写
      5.文件要加后缀
    

#CMakeLists.txt

PROJECT (HELLO)                            #指令全大写

SET(SRC_LIST main.cpp)                     #文件加后缀
#SET(SRC_LIST main.cpp t1.cpp;t2.cpp)      #空格或者;隔开

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}) #变量读取$()
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
#

ADD_EXECUTABLE(hello ${SRC_LIST})

2.3COPYRIGHT      
2.4 README
2.5 runhello.sh
2.6 doc/hello.txt

3.安装 

   INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等。
 1.修改工程文件的CMakeLists.txt  

 2.bash命令

INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/)
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake)
# 此时build下没有文件 到build文件夹下 cmake make  make install
cd build
cmake ..       #生成 Makefile
make           #生成 bin/hello
make install   #默认安装到 /usr/local/




     
4.CMAKE语法
   4.1PROJECT
       
用来指定工程的名字和支持的语言

PROJECT (HELLO)            指定了工程的名字,并且支持所有语言—建议
PROJECT (HELLO CXX)        指定了工程的名字,并且支持语言是C++
PROJECT (HELLO C CXX)      指定了工程的名字,并且支持语言是C和C++

 4.2 MESSAGE
       
向终端输出用户自定义信息
 

- SEND_ERROR,产生错误,生成过程被跳过。
- SATUS,输出前缀为—的信息。
- FATAL_ERROR,立即终止所有 cmake 过程.


4.3SET
     
用来显示的指定变量的

SET(SRC_LIST main.cpp)    SRC_LIST变量就包含了main.cpp

也可以 SET(SRC_LIST main.cpp t1.cpp t2.cpp)

4.4 ADD_EXECUTABLE
     
生成可执行文件,以下3种写法都可以

ADD_EXECUTABLE(hello ${SRC_LIST})
ADD_EXECUTABLE(hello main.cpp)

PROJECT(HELLO)
ADD_EXECUTABLE(hello main.cpp)



 


 

;