CMake 学习笔记整理(4)
2016-03-22 22:16
302 查看
把笔记分享给大家!
接上篇内容 CMake 学习笔记整理(3)
温故而知新 :-D
接上篇内容 CMake 学习笔记整理(3)
温故而知新 :-D
######################t11 ##########################要点须知########################## # CMake 常用变量, 大小写敏感!(前面有部分内容挖了一些坑:-D) # 如果是 in source 编译, 指得就是工程顶层目录 # 如果是 out-of-source 编译, 指的是工程编译发生的目录 message(STATUS "binary_dir: " ${PROJECT_BINARY_DIR}) message(STATUS "binary_dir: " ${tianchao_BINARY_DIR}) message(STATUS "binary_dir: " ${CMAKE_BINARY_DIR}) # 不论采用何种编译方式,都是工程顶层目录 message(STATUS "source_dir: " ${PROJECT_SOURCE_DIR}) message(STATUS "source_dir: " ${tianchao_SOURCE_DIR}) message(STATUS "source_dir: " ${CMAKE_SOURCE_DIR}) # 当前处理的 CMakeLists.txt 所在的路径 message(STATUS "current_source_dir: " ${CMAKE_CURRENT_SOURCE_DIR}) # ADD_SUBDIRECTORY(src bin)可以更改这个变量的值。 # 使用 SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对这个变量造成影响 # 它仅仅修改了最终目标文件存放的路径 message(STATUS "current_binary_dir: " ${CMAKE_CURRENT_BINARY_DIR}) # 输出调用这个变量的 CMakeLists.txt 的完整路径 message(STATUS "current_file: " ${CMAKE_CURRENT_LIST_FILE}) # 输出这个变量所在的行 message(STATUS "current_file: " ${CMAKE_CURRENT_LIST_LINE}) # 分别用来重新定义最终结果的存放目录 set(EXECUTABLE_OUTPUT_PATH <path>) set(LIBRARY_OUTPUT_PATH <path>) # 还有一些其它的, 这里先了解一下 # 这个变量用来定义自己的 cmake 模块所在的路径 # 如果你的工程比较复杂,有可能会自己编写一些 cmake 模块 # 这些 cmake 模块是随你的工程发布的,为了让 cmake 在处理 # CMakeLists.txt 时找到这些模块, 你需要通过 SET 指令, # 将自己的 cmake 模块路径设置一下 # 这时候你就可以通过 INCLUDE 指令来调用自己的模块了。 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) # 返回通过 PROJECT 指令定义的项目名称 PROJECT_NAME ##########################要点须知########################## # 先完成t7, 要有这些 # /usr/lib/ # libcba.so.1.2 # libcba.so.1 # libcba.so # libcba.a # /usr/include/xyz/ # xyz.h # proj/ # CMakeLists.txt 重新写入 message(STATUS "current_line: " ${CMAKE_CURRENT_LIST_LINE}) message(STATUS "current_file: " ${CMAKE_CURRENT_LIST_FILE}) message(STATUS "binary_dir: " ${CMAKE_BINARY_DIR}) message(STATUS "source_dir: " ${PROJECT_SOURCE_DIR}) message(STATUS "current_source_dir: " ${CMAKE_CURRENT_SOURCE_DIR}) project(tianchao) SET(CMAKE_CXX_COMPILER "g++") SET(CMAKE_CXX_FLAGS "-std=c++11") add_subdirectory(src src233) # proj/src # CMakeLists.txt 重新写入 message(STATUS "current_file: " ${CMAKE_CURRENT_LIST_FILE}) message(STATUS "current_line: " ${CMAKE_CURRENT_LIST_LINE}) message(STATUS "binary_dir: " ${CMAKE_BINARY_DIR}) message(STATUS "source_dir: " ${PROJECT_SOURCE_DIR}) message(STATUS "current_source_dir: " ${CMAKE_CURRENT_SOURCE_DIR}) message(STATUS "current_binary_dir: " ${CMAKE_CURRENT_BINARY_DIR}) add_executable(tianchao main.cpp) set(EXECUTABLE_OUTPUT_PATH exe) target_link_libraries(tianchao cba) find_path(xyzHeader NAMES xyz.h PATHS /usr/include ) if(xyzHeader) include_directories(${xyzHeader}) endif(xyzHeader) # cmake配置, make编译 # 注意这次build 和proj 是同一级目录 # proj/../build cmake .. make # result 保留关键信息 # 这个结果很清楚 -- current_file: 1 -- current_file: /home/lub/backup/cmake/t2/CMakeLists.txt -- binary_dir: /home/lub/backup/cmake/build -- source_dir: -- current_source_dir: /home/lub/backup/cmake/t2 -- current_file: /home/lub/backup/cmake/t2/src/CMakeLists.txt -- current_file: 2 -- binary_dir: /home/lub/backup/cmake/build -- source_dir: /home/lub/backup/cmake/t2 -- current_source_dir: /home/lub/backup/cmake/t2/src -- current_binary_dir: /home/lub/backup/cmake/build/src233 ######################t12 ##########################要点须知########################## # CMake 调用和设置环境变量 message(STATUS "HOME dir: $ENV{HOME}") set(ENV{HOME} <newpath>) # 自动添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR # 到当前处理的 CMakeLists.txt, 相当于在每个 CMakeLists.txt 加入: INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) # 同等效果, by default it's OFF set(CMAKE_INCLUDE_CURRENT_DIR ON) # 将工程提供的头文件目录始终至于系统头文件目录的前面 # 当你定义的头文件确实跟系统发生冲突时可以提供一些帮助 CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE # 之前已经提及 CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH # CMake 系统信息 CMAKE_MAJOR_VERSION: 主版本号,比如 2.4.6 中的 2 CMAKE_MINOR_VERSION: 次版本号,比如 2.4.6 中的 4 CMAKE_PATCH_VERSION: 补丁等级,比如 2.4.6 中的 6 CMAKE_SYSTEM: 系统名称,比如 Linux-2.6.22 CMAKE_SYSTEM_NAME: 不包含版本的系统名,比如 Linux CMAKE_SYSTEM_VERSION: 系统版本,比如 2.6.22 CMAKE_SYSTEM_PROCESSOR: 处理器名称,比如 i686. UNIX: 在所有的类 UNIX 平台为 TRUE,包括 OS X 和 cygwin WIN32: 在所有的 win32 平台为 TRUE,包括 cygwin # 这个开关用来控制默认的库编译方式,如果不进行设置, # 使用 ADD_LIBRARY 并没有指定库类型的情况下,默认编译生成的库都是静态库 # 下面将默认生成的为动态库 SET(BUILD_SHARED_LIBS ON) # 设置 C 编译选项 set(CMAKE_C_FLAGS "option") # or ADD_DEFINITIONS() # 设置 C++编译选项 set(CMAKE_CXX_FLAGS "option") # or ADD_DEFINITIONS() ##########################要点须知########################## # 简单测试 # proj/ # CMakeLists.txt 重写 project(tianchao) message(STATUS "HOME dir: $ENV{HOME}") set(ENV{HOME} "/home/username/daimeng") message(STATUS "HOME dir: $ENV{HOME}") message("major version: "${CMAKE_MAJOR_VERSION}) message("system verion: "${CMAKE_SYSTEM_VERSION}) message("UNIX: "${UNIX}) SET(CMAKE_CXX_COMPILER "g++") SET(CMAKE_CXX_FLAGS "-std=c++11") add_subdirectory(src) add_subdirectory(lib) # proj/lib # CMakeLists.txt 重写 set(BUILD_SHARED_LIBS ON) add_library(cba "xyz.h" "xyz.cpp") # proj/src # CMakeLists.txt 添加 # 看不懂官方文档, 似乎是这个意思 # 谁知道是什么意思请务必写在评论区, 谢谢! add_definitions(-Dstd=c++11) # proj/build # cmake配置, make编译 # result 保留关键信息 # 这个结果很清楚 -- HOME dir: /home/lub -- HOME dir: /home/username/daimeng major version: 2 system verion: 3.16.0-62-generic UNIX: 1 # proj/build/lib # libcba.so
相关文章推荐
- js中的==和===区别
- Python __call__
- 转换操作符 和转换函数
- 结对项目-词频统计
- dp sp 等的区别
- 多态与继承
- <香港科技大学html+css+js课堂笔记>week3--JavaScript高级部分
- 增强Eclipse/MyEclipse的代码自动提示功能
- 【poj 3414】Pots 题意&题解&代码(C++)
- leetcode303.[DP] Range Sum Query - Immutable
- LightOJ 1231 Coin Change (I)(部分背包)
- ExtJs之Ext.isEmpty
- 《机电传动控制》第四周作业
- HDU1860:统计字符
- 关于bufferedreader的read()与readline()读取出错的原因
- 简明Python教程学习笔记_5_解决问题
- 复制文件 C代码实现
- HTTP学习笔记:URL与资源
- 模板实现顺序表
- 高精度-加法