闹心的CMakeList!!

来源:互联网 发布:阿里云imap设置 编辑:程序博客网 时间:2024/05/02 02:29

被CMakeList里各种乱七八糟的路径搞的神犯,建立了一个最简单的项目梳理一下。

环境:Ubuntu 14.04 x64

1、建文件夹!!如下图:

        bin 用来放编译好的可执行二进制文件。
  aaaa 用来放源代码,好像都用src,我就是为了试试这玩意到底是啥。
  lib 用来放编译好的库文件。
  include 用来放头文件。

2、往根目录下的CMakeLists.txt里写写写!!(cmake 要求工程主目录和所有存放源代码子目录下都要编写CMakeLists.txt 文件,注意大小写.)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # CMake 最低版本要求,低于2.6 构建过程会被终止。
PROJECT(hello)              #定义工程名称
MESSAGE(STATUS "Project: hello")   # 打印相关消息消息
MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")

SET(CMAKE_BUILE_TYPE DEBUG)         # 指定编译类型,debug 或者为 release
                                    # debug 版会生成相关调试信息,可以使用 GDB 进行
                                    # release不会生成调试信息。当无法进行调试时查看此处是否设置为 debug.
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")          # 指定编译器
                                             # CMAKE_C_FLAGS_DEBUG            ----  C 编译器
                                             # CMAKE_CXX_FLAGS_DEBUG        ----  C++ 编译器
                                             # -g:只是编译器,在编译的时候,产生调试信息。
                                             # -Wall:生成所有警告信息。一下是具体的选项,可以单独使用

#设定可执行二进制文件的目录编译完成之后生成的.a(动态库)或者.o (静态库)文件的存储目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    
#设定存放编译出来的库文件的目录,这里放组成工程的各个”模块“!
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#并且把该目录设为连接目录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)

#设定头文件目录,主程序中的#include的.h文件坐在的目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)

# 添加子目录,.cpp源码的所在目录,正常一般都用src啦~我就用aaaa!!!
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/aaaa)

---------------------------------------------------------------------------------------------------------------------------------------------

上面就是根目录下的cmakelist文件了,定义了整个工程的各种路径啊,其实就是告诉编译器去哪找 .h头文件 ,去找找源码,编译完的东东放到哪里。

这里lib和include区别:lib放的是编译完成后的库的“实体”,include里放的是这个库的  .h头文件(目录、接口等)。一个大的工程,可能需要几个不同的”模块“,我们编写完各个模块之后编译生成对应的”库“,就是”实体“。这些库(模块)有效的组织在一起就是可以构成大的工程了,这种”有效的组织“需要我们建立连接,具体怎么连编译器会帮我们干,我们只要告诉编译器连接目录在哪里就ok了。

-------------------------------------------------------------------------------------------------------------------------------------------自己的理解,求指正~~!!

3、编写主程序,在aaaa(src)写main.cpp各种cpp源代码

4、在aaaa(src)目录下也要写一个cmakelist文件,为啥呢?因为丫就是这么规定的,有源码的地方都特么要有CMakeList.txt!!!不过这回简单了就一行:

ADD_EXECUTABLE(hello main.cpp)#生成一个名字叫做hello的可执行文件,hello从哪里来?从main.cpp里来,要是还有其他的子cpp也要一并添加进去,中间用空格隔开!

例如:ADD_EXECUTABLE(hello main.cpp bbb.cpp ccc.cpp)

5、编译~~生成可执行文件

首先回到根目录下:

cd hello

mkdir build#建立一个build文件夹,用来存放编译过程中的乱七八糟,必须用build为名吗??我还真试了叫bbb~~~~~

cd build#进入build文件夹

cmake ..#记得两个点cmake ..

make #编译,嘟嘟嘟嘟

-----------------------------------------

6、收割~运行可执行文件,打开/bin,发现多了个东西,那就是可执行的二进制文件了!打开一个终端 ./hello,吼吼,收割~

对~就是倒数第二行的这个hello!!因为我的主程序就一句话cout<<"hello"<<endl;

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

菜鸟,轻喷~

0 0
原创粉丝点击