CMake 构建项目教程-简介
CMake 构建项目教程-简介
Linux 平台构建项目,选择了CLion作为C++的IDE,而CLion默认就是使用CMake构建项目,所以这里记录了CMake在构建项目过程的一些小知识。
1. 项目的目录结构如下所示,包括静态库和动态库项目,同时也包括一个测试项目。
. ├── bin │ └── test1 ├── CMakeLists.txt ├── include │ └── apple.h ├── lib │ ├── liblearn.a │ ├── liblearn.so -> liblearn.so.1 │ ├── liblearn.so.1 -> liblearn.so.1.0 │ └── liblearn.so.1.0 ├── src │ ├── apple.cpp │ └── CMakeLists.txt └── test ├── CMakeLists.txt └── main.cpp 5 directories, 11 files
bin 可执行文件的生成目录,lib 链接库文件的生成目录,include 头文件所在目录,src 源代码文件所在目录,test 测试程序源代码所在目录。
2. . 根目录 CMakeList.txt
cmake_minimum_required(VERSION 3.5) project( cmake_learn ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") add_subdirectory( src ) add_subdirectory( test )
3. src 目录 CMakeList.txt
# 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。 aux_source_directory(. SOURCE_FILES ) # 或者使用下面这种方式。 #set( SOURCE_FILES # apple.cpp # orage.cpp ) # 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。 include_directories( ${PROJECT_SOURCE_DIR}/include ) # 指定编译后的库文件的输出路径。 set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib ) # 生成目标动态库。 add_library( learn SHARED ${SOURCE_FILES} ) # 生成目标静态库。 add_library( learn_static STATIC ${SOURCE_FILES} ) # 指定静态库的输出名称。 set_target_properties( learn_static PROPERTIES OUTPUT_NAME "learn" ) # 允许静态库与动态库同时存在。 set_target_properties( learn PROPERTIES CLEAN_DIRECT_OUTPUT 1 ) set_target_properties( learn_static PROPERTIES CLEAN_DIRECT_OUTPUT 1 ) # 指定动态库的版本: # VERSION 动态库版本; # SOVERSION API的版本。 set_target_properties( learn PROPERTIES VERSION 1.0 SOVERSION 1 )
4. test 目录 CMakeList.txt
# 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。
aux_source_directory(. SOURCE_FILES )
# 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。 include_directories( ${PROJECT_SOURCE_DIR}/include ) # 指定编译后的可执行程序的输出路径。 set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin ) # 指定生成可执行程序。 add_executable( test1 ${SOURCE_FILES} ) # 添加链接库目录,CMake将在如下如目录中查找所链接的外部库。 link_directories( ${PROJECT_SOURCE_DIR}/lib ) # 指定链接库。 target_link_libraries( test1 learn )
6. 总结
目录树种使用的 h cpp 文件都是测试代码,并不重要,关键是分析清楚 CMake 是怎样嵌套的互相关联的,编译后生产的静态库与动态库都按预期出现在了 lib 目录中,测试的可执行文件也 生成在了 bin 目录中。
posted on 2017-03-31 20:06 wanghaiyang1930 阅读(1269) 评论(0) 编辑 收藏 举报