cmake在语法上面有很多不同的地方,如果是想从头学习建议参考官方教程
本文主要是记录一些cmake和makefile相对应的地方
cmake_minimum_required(VERSION 3.7)
project(boost)
set(CMAKE_CXX_STANDARD 11)
set(BOOST_ROOT D:/boost_1_64_0)
#自定义编译选项
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror ")
#-D preprocessor
#add_definitions("-D _WIN32_WINNT=0x0501")
find_package(Boost COMPONENTS exception thread system REQUIRED)
#include文件搜索路径
include_directories(D:/boost_1_64_0)
set(SOURCE_FILES main.cpp)
add_executable(boost main.cpp)
link_directories(D:/boost_1_64_0/stage/lib)
#要将库的目录的名字填完整
link_libraries()
#只需要填库的名字
target_link_libraries(boost ${Boost_LIBRARIES} ws2_32)
上面是一个简单项目的CMakeLists.txt文件
project() //里面添加你的项目名
set() //设置一些自定义变量和自定义编译选项
add_definitions() //这里相当于makefile中的#define
find_package() //可以帮忙找到一些你项目所需要的包,具体是哪个包也得看具体情况
include_directories //相当于gcc命令中的-I
add_executable() //这个是你项目的文件,如果有多个记得都加上
link_directories() //相当于gcc命令的-L
target_link_libraries //相当于gcc命令的-l
这里如果是没有遇到找不到包的情况的话基本上link_libraries()是用不上的,如果找不到的话可以试一下这个方式类似这样 link_libraries(D:\boost_1_63_0\stage\lib\libboost_atomic-mgw46-mt-1_63.a)
另外找包找不到的时候可以使用message(Boost_LIBRARIES)看看目录是否正确(本例是查看boost lib路径)
基本上对应的语法就是这样,还有个技巧是用cmake <path> 可以生成makefile文件。
比如cmake . 就代表在当前目录下生成项目对应的makefile文件(注意后面有个点)
cmake也有一些关于流程判断的语句,建议查看别的完整教程