CMake里面怎么递归地设定头文件的搜索目录
2017-08-03 14:30
5107 查看
本文内容要点: 1. 多目录下,头文件路径包含 2. 项目依赖关系设置 3. 发现的一些问题 本文涉及到的CMake命令: project(name) : 设置project的名字为name。 add_dependencies:设置依赖关系 add_subdirectory:添加子目录 add_executable:添加可执行文件 add_library:添加库 cmake_minimum_required:设置cmake最低版本要求 include_directories:包含目录 target_link_libraries:链接库 set:可以用于设置变量 补充命令: file(GLOB_RECURSE HEADER_FILES dir/*.h??) 此命令可以用来收集源文件 HEADER_FILES 作为变量保存收集的结果。 后面为文件过滤器,其中dir为起始搜索的文件夹,即在dir目录下,开始收集,而且会遍历子目录。 ? 代表 a-z。 首先给出目录结构(“-”表示目录级数) -sin --include ---sin.h --src ---sin.cpp -sinutil --include ---sinutil.h --src ---sinutil.cpp -main --main.cpp 目的: main.cpp 要使用 sin 里面 sin.h 和 sin.cpp 生成的静态库 sin.lib,而 sin.lib 的生成要使用 sinutil 里面的 sinutil.h 和 sinutil.cpp 生成的静态库 sinutil.lib 。 sinutil.cpp 要包含 sinutil.h,而 sinutil.h 不在 sinutil.cpp 目录下。同理 sin.cpp 也要包含 sinutil.h ,main.cpp 要包含 sin.h。 根据CMake的规则,在根目录下和每个子目录下加入 CMakeLists.txt 文件。 # 为了便于区分,我给每个 CMakeLists.txt 加了编号后缀。 # 真正运行的时候,CMake配置文件只能命名为 CMakeLists.txt。 得到的目录结构如下: - CMakeLists.txt - 1 -sin -- CMakeLists.txt - 2 --include ---sin.h --src ---sin.cpp -sinutil -- CMakeLists.txt - 3 --include ---sinutil.h --src ---sinutil.cpp -main -- CMakeLists.txt - 4 --main.cpp CMake配置文件内容如下: #CMakeLists.txt - 1 cmake_minimum_required(VERSION 2.8.1) project(CMakeDemo) include_directories(${CMakeDemo_SOURCE_DIR}/sin/include) include_directories(${CMakeDemo_SOURCE_DIR}/sinutil/include) add_subdirectory(sin) add_subdirectory(sinutil) add_subdirectory(main) #CMakeLists.txt - 4 project(MainDemo) set(SRC_LIST main.cpp) add_executable(demo ${SRC_LIST}) add_dependencies(demo SinLibrary) target_link_libraries(demo ${SinLibrary}) #CMakeLists.txt - 2 set(HEADER_LIST include/sin.h) set(SRC_LIST src/sin.cpp) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(SinLibrary ${HEADER_LIST} ${SRC_LIST}) add_dependencies(SinLibrary SinUtilLibrary) target_link_libraries(SinLibrary ${SinUtilLibrary}) #CMakeLists.txt - 3 set(HEADER_LIST include/sinutil.h) set(SRC_LIST src/sinutil.cpp) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(SinUtilLibrary ${HEADER_LIST} ${SRC_LIST}) 结论: 1. CMake使用 include_directories 命令来添加头文件包含路径,且 include_directories 命令具有继承性。下级目录继承了上级目录中CMakeLists.txt 里面 include 的 directrories。但是平级目录之间的 CMakeList.txt 里面的include_directories 不能共享。 2. CMAKE_CURRENT_SOURCE_DIR 为 CMake 定义的环境变量,指向当前 CMakeLists.txt 所在的目录。 3. 当使用 project(name) 命令时,CMake会自动生成两个变量 name_SOURCE_DIR 和 name_BINARY_DIR,前一个指向使用 project 命令的CMakeLists.txt 所在的文件夹,后一个指向用cmake构建时,Build 目录下对应的目录。 问题: 1. 目前还没搞清 project 与 VS 里面的 解决方案(solution)和 工程(项目,project)的对应关系。 2. 使用 add_dependencies 来设置依赖关系时,在VS 2003 下,会为每一个subdirectory里面的project生成一个额外的带 UTILITY 后缀的工程,能不生成吗?
相关文章推荐
- gcc头文件或库的搜索路径的设定(ubuntu)
- C#递归搜索指定目录下的文件或目录
- C# 递归搜索目录,历遍文件
- PHP递归搜索目录
- 自己家里面有wifi网络可是却搜索不到怎么回事呢?
- grep搜索当前目录和递归搜索子目录中文本文件的特定pattern
- 我是新手,怎么才能让我自己在搜索里面快速的搜索到我需要的文章呢?收藏
- 我是新手,怎么才能让我自己在搜索里面快速的搜索到我需要的文章呢?
- 用VB函数Dir实现递归搜索目录
- 给Listview里面Item里的每一个控件怎么设定点击事件
- 用嵌套递归的方法搜索指定目录下的所有文件
- Win32非递归遍历和搜索文件以及目录算法
- mvc controller放目录里面该怎么办?
- word文档里面正文跑到目录里面怎么办
- Windows下递归搜索文件及其所在目录 .bat脚本实现
- gcc头文件或库的搜索路径的设定(ubuntu)
- 用CfileFind递归搜索目录
- 怎么删除eclipse启动时工作空间里面的路径选项(如何启动eclipse时提示选择工作空间||删除workspace空间的目录)
- 递归搜索所有文件目录
- 递归搜索给定的目录下所有的文件