cmake 多级CMakeLists.txt调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake 多级CMakeLists.txt调用相关的知识,希望对你有一定的参考价值。

参考技术A 这里做一个demo来演示,我的demo文件结构如下:

根目录下CMakeLists.txt 编写如下:

子目录下的CMakeLists.txt 编写如下:

创建编译文件夹:

执行编译指令:

执行目标文件:

查看生成的静态库:

Cmake CMakeLists.txt配置文件通用模板

1. 文件组织方式

|——mmseg.h
|——mmseg.cpp
|——mmseg_main.cpp
|——dict/
        |——dict.cpp
        |——dict.h
        |——dict.txt

2. 根目录下的CMakeLists.txt

PROJECT(mmseg CXX) #项目名称

#Cmake最低版本要求
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 

#允许gdb调试
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENVCXXFLAGS -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENVCXXFLAGS -O3 -Wall")

#添加C++11支持及其他选项
set(CMAKE_CXX_FLAGS "-std=c++0x $CMAKE_CXX_FLAGS -g -ftest-coverage -fprofile-arcs -Wno-deprecated")
#set(CMAKE_CXX_FLAGS "-std=c++0x $CMAKE_CXX_FLAGS -g -ftest-coverage -fprofile-arcs")


#添加dict子目录
add_subdirectory(dict) 

#当前目录下所有源文件赋给DIR_SRCS
AUX_SOURCE_DIRECTORY(. DIR_SRCS) 

#生成可执行文件
add_executable(mmseg $DIR_SRCS) 

#添加C++11编译选项,但是只有CMAKE 3.1支持
#target_compile_features(mmseg PRIVATE cxx_range_for)

#添加链接库
target_link_libraries(mmseg Dict)

3. Dict/目录下CMakeLists.txt

#查找当前目录下所有源文件
#并将结果保存在DIR_LIB_SRCS变量中
aux_source_directory(. DIR_LIB_SRCS)

#生成链接库
add_library(Dict $DIR_LIB_SRCS)

4. cmake与automake比较

参见:http://blog.csdn.net/cnsword/article/details/7542696

5. cmake其他相关用法

参见:
http://www.cppblog.com/Roger/archive/2011/11/17/160368.html
https://www.ibm.com/developerworks/cn/linux/l-cn-cmake/

以上是关于cmake 多级CMakeLists.txt调用的主要内容,如果未能解决你的问题,请参考以下文章

从 QMake 到 CMake。 (不同的路径级别)

Cmake多级目录编译

使用CMake编译C/C++程序

cmake基础教程(11)add_subdirectory如何添加非子目录的CMakeLists.txt

cmake 引用子目录的库

Cmake实现样例