1. 编写C++文件(main.cpp)

#include<bits/stdc++.h>
using namespace std;

int main(void)
{
    printf("Hello World!\n");
    return 0;
}

2. 编写CMakeList.txt文件

cmake_minimum_required (VERSION 2.8)  # cmake的版本

project (Demo)  # 工程名称

add_executable(main main.cpp)  # 生成可执行文件main,依赖于main.cpp

3. 执行命令生成可执行文件

$ mkdir build && cd build
$ cmake ../
$ make
$ ./main

4. 运行结果

图片说明

5. 编写CMakeList.txt的常用命令

# 即把目录 ./ 下的源文件列表存放在 SRC_LIST 变量中
aux_source_directory(. SRC_LIST)  

# 向当前工程添加多个指定头文件的路径
include_directories(test_func test_func1)  

# EXECUTABLE_OUT_PATH 和 PROJECT_SOURCE_DIR 是 CMake 自带的预定义变量
# EXECUTABLE_OUTPUT_PATH :目标二进制可执行文件的存放位置
# PROJECT_SOURCE_DIR:工程的根目录
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)   

# 生成动态库或静态库 (第1个参数指定库名,第2个参数指定动态还是静态,第3个参数指定生成库的源文件)
add_library (testFunc_shared SHARED ${SRC_LIST})
add_library (testFunc_static STATIC ${SRC_LIST})

# 设置目标的一些属性,比如名称,库的版本号
set_target_properties (testFunc_shared PROPERTIES OUTPUT_NAME "testFunc")
set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")

# LIBRARY_OUTPUT_PATH: 库文件的默认输出路径
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

# link_directories: 添加非标准的共享库搜索路径
link_directories (${PROJECT_SOURCE_DIR}/lib)

# target_link_libraries: 把目标文件与库文件进行链接
target_link_libraries (main testFunc)

6. link_libraries 和 target_link_libraries 的区别

1)link_libraries用在add_executable之前,target_link_libraries用在add_executable之后.
2)link_libraries 添加需要链接的库文件路径(./lib),target_link_libraries 设置需要链接库文件的名称.

参考 https://www.cnblogs.com/Trony/p/10952507.html