cmake
2019年3月19日
cmake文件内部不需要注意大小写,但是要注意的是cmake的文件名要大小写注意区分清楚,即
CMakeLists.txt
,这个文件建立在你要编译的文件目录下。一般的cmake需要的格式为
#首先规定cmake的版本,前面加‘#’表示这个是注释
cmake_minimum_required(VERSION 2.8)
#接下来是编译的目标名称
project(example)
#然后就是添加编译的项目
add_executable(example test.cpp)
#一般来说如果是用的vim编写的话,用大写,前面的函数字体会变成黄色的
然后这个大致等同于makefile的
GCC = g++
example: again.cpp
$(GCC) $< -o $@
建立好这个文件后,在terminal中输入
cmake .
make
完成编译。
同时,如果需要添加编译选项,比如,我想添加
-std=c++11
,示例如下
add_compile_options(-std=c++11)
这句等同于makefile里面的
OPTIONS = -std=c++11
example: again.cpp
$(GCC) $< -o $@ $(OPTIONS)
对于makefile来说,就等同于
g++ again.cpp -o example -std=c++11
添加头文件目录
INCLUDE_DIRECTORIES("./hello")
这句就等同于
g++
的
g++ -I ./hello
添加链接文件
LINK_DIRECTORIES("./hello")
等同于
g++ -L ./hello
添加链接库,比如像添加
-lpthread
-lgmp
TARGET_LINK_LIBRARIES(example pthread gmp)
这儿完整的CMakeLists.txt内容如下
cmake_minimum_required (VERSION 2.8)
project(example)
add_compile_options(-std=c++11)
LINK_DIRECTORIES("./hello")
INCLUDE_DIRECTORIES("./hello")
ADD_EXECUTABLE(example again.cpp)
TARGET_LINK_LIBRARIES( example pthread gmp)
要注意行文的顺序,首先是版本要求和项目名称要写在前面,再就是添加链接库要写再
ADD_EXECUTABLE
后面,再就是,添加链接文件以及添加头文件目录要写在
ADD_EXECUTABLE
前面,不然的话,
make
的时候会出现
undefined
的问题。
同时,还可以将子文件编译成静态链接库,然后直接调静态链接库。
#自动搜索所有的子目录下的源文件,然后将名称保存在DIR变量
aux_source_directory(. DIR)
#添加hello子目录
add_subdirectory(hello)
#指定生成目标
add_executable(example again.cpp)
#添加链接库
target_link_libraries(example test)
然后在hello目录下创建一个CMakeLists.txt文件
aux_source_directory( . DIR)
#生成链接库
add_library(test ${DIR})
还有些详细的操作,见 https://www.hahack.com/codes/cmake/。
Previous
Makefile写法(转)
Newer