1.单目录单文件
在这里插入代码片
CMAKE_MINIMUM_REQUIRED(VERSION 3.10) #声明编译该代码所需的最小Cmake版本
PROJECT(demo1) ##要编译的工程的名字
ADD_EXECUTABLE(demo1 main.cpp)##demo1为生成可执行文件的名字为demo1.exe main.cpp为要编译的对象,文件依赖
2.单目录多文件
#AUX_SOURCE_DIRECTORY(dir VAR)
#发现一个目录下所有的源代码文件并将列表存储在一个变量中
#把当前目录下的所有源码文件名赋给变量DIR_HELLO_SRCS
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_EXECUTABLE(demo2 ${DIR_SRCS})
3.多目录多文件(源文件在顶层目录) 先写子目录下的CMakeLists.txt
#发现一个目录下所有的源代码文件并将列表存储在一个变量中
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
#把子目录下主函数要调用的文件设置为静态库
ADD_LIBRARY(Mylib STATIC ${DIR_LIBSRCS})
#或者设置为动态库
ADD_LIBRARY(Mylib SHARED ${DIR_LIBSRCS})
接下来写顶层目录
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
PROJECT(demo3)
#添加子目录,即其他文件夹的名称
ADD_SUBDIRECTORY(./mylib)
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_EXECUTABLE(demo3 ${DIR_SRCS})
demo3为可执行文件名字 Mylib为生成的静态库名字 链接到可执行文件里面
TARGET_LINK_LIBRARIES(demo3 Mylib)
4.多目录多文件(标准 即源文件一个文件夹src 库文件一个文件夹mylib camke文件一个文件夹build ) 在demo3基础上 在源文件夹内写CMakeLists.txt
#类似于stm32如果要加头文件,得点魔术棒增加头文件路径
#${PROJECT_SOURCE_DIR}表示根目录路径 可用.代替
#这里就表示库文件的路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_EXECUTABLE(demo4 ${DIR_SRCS})
TARGET_LINK_LIBRARIES(demo4 Mylib)
在顶层文件写CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
PROJECT(demo4)
ADD_SUBDIRECTORY(./mylib)
增加工程中的源文件路径
ADD_SUBDIRECTORY(./src)
然后在build文件下执行cmake 2.改进 在库文件CMakeLists里面加这么一句话
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
#生成库文件Mylib.a文件放置的路径
# ${PROJECT_BINARY_DIR}在build下执行cmake,所以就为build文件路径
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
ADD_LIBRARY(Mylib STATIC ${DIR_LIBSRCS})
在源文件CMakeLists里面加这么一句话
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_EXECUTABLE(demo4 ${DIR_SRCS})
TARGET_LINK_LIBRARIES(demo4 Mylib)
|