被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;
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
菜鸟,轻喷~