说明:本人使用的系统为 CentOS7。
简单的 Hello world
新建一个 main.cpp
:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world" << endl;
return 0;
}
编写 CMakeLists.txt
:
# cmake 最低版本需求
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# 项目名称
PROJECT(HELLO)
# 把当前目录下所有源代码文件和头文件加入变量 srcs
AUX_SOURCE_DIRECTORY(. srcs)
# 生成可执行文件 hello
ADD_EXECUTABLE(hello ${srcs})
新建一个 build
文件夹使目录如下:
[16:22:33 cmake_learn]$ tree
.
├── build
├── CMakeLists.txt
└── main.cpp
进入 build
文件夹中执行 cmake ..
:
[16:23:09 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/artist/learn/cmake_learn/build
之后:
[16:23:12 build]$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake Makefile
之后 make:
[16:23:32 build]$ make
Scanning dependencies of target hello
[100%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
Linking CXX executable hello
[100%] Built target hello
现在我们查看一下当前目录:
[16:23:43 build]$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake hello Makefile
这里有一个可执行文件 hello
,运行它:
[16:24:02 build]$ ./hello
Hello world
这样我们就运行起了第一个CMake
小工程。
可执行文件一般会放到 bin
目录下,让我们最后修改一下 CMakeLists.txt
文件。
# cmake 最低版本需求
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# 项目名称
PROJECT(HELLO)
# 把当前目录下所有源代码文件和头文件加入变量 srcs
AUX_SOURCE_DIRECTORY(. srcs)
# 生成可执行文件 hello
ADD_EXECUTABLE(hello ${srcs})
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
最后这句是我们新添加的,意思是:将可执行文件生成到一个指定的位置/bin
,而 ${PROJECT_SOURCE_DIR}
代表你的 CMakeLists.txt
的位置。好了这回我们把 build
目录中的文件都删除干净,重新 cmake 一下:
[16:31:17 build]$ rm -fr *
[16:31:21 build]$ cmake ..
[16:31:22 build]$ make
[16:31:23 build]$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake Makefile
查看发现没有了可执行文件 hello
,我们回到上一层 CMakeLists.txt
所在位置再看一下:
[16:33:10 cmake_learn]$ ls
bin build CMakeLists.txt main.cpp
进入 bin
执行 hello
:
[16:34:54 cmake_learn]$ cd bin/
[16:34:55 bin]$ ls
hello
[16:34:56 bin]$ ./hello
Hello world
最后让我们看一眼整体结构:
[16:35:59 cmake_learn]$ tree . -L 2
.
├── bin
│ └── hello
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── main.cpp
这一次让我们多一个带头文件的函数
结构:
[17:06:15 cmake_learn]$ tree
.
├── build
├── CMakeLists.txt
├── main.cpp
├── poem.cpp
└── poem.h