对于小项目,头文件和源文件在一个文件夹里,整个文件布局如下:
test #主目录
---main.cpp
---CMakeLists.txt
---src #子目录
------functions.cpp
------functions.h
------CMakeLists.txt
这样运行的过程就是用main 函数调用编译好的库文件即可
此时,子目录的CMakeLists.txt写法如下:
# 查询当前目录下所有的源文件并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 编译成静态库文件
add_library(Functions ${DIR_LIB_SRCS})
主目录test下的CMakeLists.txt写法如下:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
set( CMAKE_BUILD_TYPE Release )
set( CMAKE_CXX_FLAGS "-std=c++11" )
# 项目信息
project (Demo2)
# 查找当前目录下的所有源文件并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
#添加子目录
add_subdirectory(functions)
# 生成可执行文件
add_executable(main ${DIR_SRCS})
target_link_libraries(main Functions) #连接到编译好的库文件
test目录下的main函数#include 头文件
#include "src/functions.h"
对于较大的项目,头文件和源文件分别在不同的文件夹里,此时可以采用类比法。还是上面的例子,只不过此时文件结构发生变化
test #主目录
---main.cpp
---CMakeLists.txt
---src #子目录
------functions.cpp
------CMakeLists.txt
---include
------functions.h
这个时候src子目录文件下的CMakeLists.txt要发生小小变换即可
include_directories("/home/yuancaimaiyi/桌面/test/include")#发生变化之处,只需要添加头文件的目录即可
aux_source_directory(. DIR_LIB_SRCS)
# 编译成静态库文件
add_library(Functions ${DIR_LIB_SRCS})
++主目录CMakeLists.txt不变++,还有一处变化的是主目录下的主函数main #include 的时候要变了
#include "include/functions.h"