cmake 自动add_subdirectory
开始学习c++已经有一段时间了,练习用的代码很零碎,需要很多个main,一直使用cmake管理,但是每新建一个学习子项,都需要去修改cmakelists,很麻烦。刚好开了个新的学习项目,所以写了个基本不用改的cmakelists
文件路径如下:
├── CMakeLists.txt
├── common │ ├── boost_log_template_main │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── common_include │ │ ├── boost_log_init.cpp │ │ ├── boost_log_init.h │ │ ├── common_configure.h.in │ │ ├── common_funcs.cpp │ │ ├── common_funcs.h │ │ └── common_includes.h │ └── properties │ ├── boost_log_settings.ini │ └── log4cplus_root.properties ├── README.md └── stl_study ├── changeable_var │ ├── CMakeLists.txt │ └── main.cpp ├── stl_common_tools │ ├── CMakeLists.txt │ ├── main.cpp │ ├── std_chrono_study.cpp │ └── std_chrono_study.h └── stl_container ├── CMakeLists.txt └── main.cpp每次要新建子项目是只需要拷贝./common/boost_log_template_main到./stl_study下,然后修改:1、文件夹名;2、子项目名
这样就方便多了
贴cmakelist: 根目录的cmakelist不用再改,会循环添加stl_study下的文件夹为子项目:cmake_minimum_required(VERSION 3.12)
project(CPP_STL_studys)set(CMAKE_CXX_STANDARD 14)
### 设置编译flags
message("cmake env flags ${CMAKE_BUILD_TYPE}")set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}")
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
message("build type debug!") set(CMAKE_CXX_FLAGS "-Wall -O0 -g -ggdb ${CMAKE_CXX_FLAGS}") elseif ("${CMAKE_BUILD_TYPE}}" STREQUAL "Release") message("build type release!") set(CAKE_CXX_FLAGS "-O3 -Wall ${CMAKE_CXX_FLAGS}") else () message("unknow type:${CMAKE_BUILD_TYPE}") endif () message("cmake cxx build flags:${CMAKE_CXX_FLAGS}")#设置版本号
set(VERSION_MAJOR 1.1) set(VERSION_MINOR 0) #配置版本号的映射文件,方便代码中使用 configure_file( "${PROJECT_SOURCE_DIR}/common/common_include/common_configure.h.in" "${PROJECT_BINARY_DIR}/convent/common_configure.h" ) #通用头文件 include_directories(${PROJECT_SOURCE_DIR}/common/common_include) include_directories(${PROJECT_BINARY_DIR}/convent)#### add execuable from sub dir
set(auto_analisis_dir ${PROJECT_SOURCE_DIR}/stl_study/)
execute_process( COMMAND ls ${auto_analisis_dir} OUTPUT_VARIABLE dirs)message("find files : \n${dirs}")
string(REPLACE "\n" ";" RPLACE_LIST ${dirs})foreach (f ${RPLACE_LIST})
message("add :${f}") add_subdirectory(${auto_analisis_dir}${f}) endforeach (f ${RPLACE_LIST}) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 子项目中的cmakelist:#子项目名 替换template_name为子项目名
set(build_temp template_name)message("\n###############################\nstart cmake ${build_temp}")
aux_source_directory(./ ${build_temp}cpps) include_directories(./) message("${build_temp}cpps find cpps : ${${build_temp}cpps}") add_executable(${build_temp} ${${build_temp}cpps}#以下为common_funcs 的cpp文件
${PROJECT_SOURCE_DIR}/common/common_include/common_funcs.cpp ${PROJECT_SOURCE_DIR}/common/common_include/boost_log_init.cpp#IDE不识别aux到的cpp文件,不进行符号表处理,只能手动变一遍
#如果发布,删除以下内容)
#拷贝配置文件 add_custom_command( TARGET ${build_temp} COMMAND echo copying files: COMMAND cp -v ${PROJECT_SOURCE_DIR}/common/properties/boost_log_settings.ini `pwd`/ COMMAND echo copying files is finished. ) add_definitions(-DBOOST_LOG_DYN_LINK)target_link_libraries(${build_temp} gtest pthread boost_log boost_log_setup boost_thread boost_system)
message("${build_temp} cmake finish\n###############################\n")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 每个子项目都有自己的依赖,这样管理方便一些会自动拷贝配置文件到执行目录
--------------------- 作者:puzzzzzzle 来源:CSDN 原文:https://blog.csdn.net/qq_33213364/article/details/87946940 版权声明:本文为博主原创文章,转载请附上博文链接!