# cmake可以简化c++的编译过程,在cmake中可以定义include的lib路径等。cmake通过编写一个CMakeLists.txt文件来对程序进行定义。cmake不区分字符大小写。
# 使用cmake执行c++函数时过程:
1. 编写CMakeLists.txt文件
# 假设我们文件下有如下文件:
# 其中CMakeLists.txt:
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(add)
# to include a lib path you can:
# one:
# include_directories(BEFORE ${PROJECT_SOURCE_DIR}/src/)
# two:
# include_directories(/home/name/project/src)
# three:
set(include_path ${PROJECT_SOURCE_DIR}/src/)
include_directories(${include_path})
add_executable(add add.cpp)
# 这里设置了包含的库的路径,这样文件就可以直接引用src下面的库了
# add_executable 添加了可执行文件,即会生成add可执行文件。
# 所有代码在https://github.com/duanyzhi/cmake
2. mkdir build
3. cd build
4. cmake ..
5. make # 生成可执行文件
6. ./main # 执行生成的可执行文件
(重新编译之前养成先把build文件夹删除的习惯)
# 当然也可以写一个sh文件一下执行上诉过程。
# 其他CMakeLists.txt语句
如果想使用-std=c++11编译需要添加下面一句即可:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
g++编译选项
-g # 编译debug
-S # 生成汇编文件
-std=c++11 # 编译c++11程序
-O0 # 编译时不优化程序
-Wall # 编译时显示所有警告
# 去掉编译出来的binary文件自带的rapth,rpath优先级大于LD_LIBRARY_PATH
SET(CMAKE_EXE_LINKER_FLAGS"-Wl,-enable-new-dtags")
cmake编译target顺序
按照subdir的顺序。如果subdir里依赖了其他target,则依次编译。
cmake常用命令及解析
project(novamind)
find_package(PythonLibs 3.7 REQUIRED)