一:
构建一个单独的项目:
https://blog.csdn.net/shuyong1999/article/details/7108563
cmake_minimum_required(VERSION 3.2)
PROJECT(HELLO)
ADD_SUBDIRECTORY(src)
需要注意的问题:
src 目录下的
CMakeLists.txt
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
ADD_EXECUTABLE(hello test.cpp Hello.cpp)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
ADD_LIBRARY(hello_so SHARED Hello.cpp)
SET_TARGET_PROPERTIES(hello_so PROPERTIES OUTPUT_NAME "hello")
ADD_LIBRARY(hello_a STATIC Hello.cpp)
SET_TARGET_PROPERTIES(hello_a PROPERTIES OUTPUT_NAME "hello")
使用时需要利用ADD_LIBRARY 添加成hello_so 或者 hello_a ,再利用set_target_properties 控制生成hello.so和hello.a
并存。
EXECUTABLE_OUTPUT_PATH 执行文件的路径
LIBRARY_OUTPUT_PATH 库文件的路径
PROJECT_SOURCE_DIR 项目层的路径
二.
构建多个项目,使用外部项目提供的库文件
#显示环境变量的值 MESSAGE(STATUS $ENV{HOME})# 指定头文件查找目录 # 注意,这里指定绝对路径。 INCLUDE_DIRECTORIES(/home/lei/cmake_test_project/single_project/include)# 指定库文件查找目录(不能只指定头文件,也需要连接到库文件) # 注意,这里指定绝对路径, 也可通过设置系统环境变量LD_LIBRARY_PATH来指定。 LINK_DIRECTORIES(/home/lei/cmake_test_project/single_project/lib)# 生成可执行文件到项目的bin目录 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)ADD_EXECUTABLE(main main.cpp)# 制定链接的外部Lib TARGET_LINK_LIBRARIES(main libhello.a)#/home/lei/cmake_test_project/single_project
MESSAGE(STATUS $ENV{HOME}) 可以用来输出环境信息
三. 使用自定义的cmake 模块
https://blog.csdn.net/shuyong1999/article/details/7108563
四、 cmake 常用的命令
https://blog.csdn.net/elloop/article/details/51127416
aux_source_directory 查找在某个路径下的所有源文件。
aux_source_directory(< dir > < variable >)
搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。该命令主要用在那些使用显式模板实例化的工程上。模板实例化文件可以存储在Templates子目录下,然后可以使用这条命令自动收集起来;这样可以避免手工罗列所有的实例。
使用该命令来避免为一个库或可执行目标写源文件的清单,是非常具有吸引力的。但是如果该命令貌似可以发挥作用,那么CMake就不需要生成一个感知新的源文件何时被加进来的构建系统了(也就是说,新文件的加入,并不会导致CMakeLists.txt过时,从而不能引起CMake重新运行。——译注)。正常情况下,生成的构建系统能够感知它何时需要重新运行CMake,因为需要修改CMakeLists.txt来引入一个新的源文件。当源文件仅仅是加到了该路径下,但是没有修改这个CMakeLists.txt文件,使用者只能手动重新运行CMake来产生一个包含这个新文件的构建系统。
六 、参考的博客
http://blog.sina.com.cn/s/blog_627927570102vq28.html