完整的最小cmakelist.txt
cmake_minimum_required (VERSION 3.8) # cmake版本最低要求
set(PROJECT_DIR "/home/hhl/code/cmake/test/src") # 设置这个项目放在哪个目录
project ("test") # 项目名称
include_directories (${PROJECT_DIR}/include) # 附加头文件目录
link_directories(${PROJECT_DIR}/lib) # 附加库路径
aux_source_directory(${PROJECT_DIR}/src SRC_LIST) # 设置./src为源文件路径
add_executable (main ${SRC_LIST}) # 寻找源文件进行编译
target_link_libraries(main libadd.a) # 编译时需要链接的库
一,
只是为项目使用头文件做准备
include_directories (${PROJECT_DIR}/include) # 设置头文件所在文件夹路径
我一会儿要使用这个文件夹
#include"xxx_.h"
这句话只是为链接静态库做准备
link_directories(${PROJECT_DIR}/lib) # 设置静态库路径
二,
这里最为核心(core),实际起作用
target_link_libraries(main libadd.lib) # 编译时需要链接的库
两句话等价于
target_link_libraries(main ${PROJECT_DIR}/lib/ libadd.lib)
最后把动态库libadd.dll扔到.exe所在文件夹
最后把动态库libadd.dll扔到.exe所在文件夹,一定要记得,ok!
以下3个都是非必须,甚至没什么卵用
qt5_wrap_ui(SOURCES_UI${MAIN_UI});
Qt Designer创建的.ui文件转换为C++代码,
set(MAIN_UI "main_window.ui")
qt5_wrap_ui(SOURCES_UI ${MAIN_UI})
add_executable(your_target_name ${SOURCES_UI} ...)
#设置自定义变量 cmake所在路径
${CMAKE_CURRENT_SOURCE_DIR}
set(yycn1 "${CMAKE_CURRENT_SOURCE_DIR}/gen/lib")
添加子工程add_subdirectory()
CMake 在给定的子目录中查找并处理 CMakeLists.txt 文件
设置依赖add_dependencies()
add_library(mylib STATIC mylib.cpp)
add_executable(myapp main.cpp)
target_link_libraries(myapp mylib)
# 添加依赖关系,确保 mylib 在 myapp 之前构建
add_dependencies(myapp mylib)
依赖关系也可以自动推断。例如,如果一个目标链接到另一个目标,CMake 通常会自动添加必要的依赖关系。但是,在某些情况下,你可能需要显式地添加依赖关系,以确保构建过程的正确顺序
在CMake里区分操作系统
if(CMAKE_SYSTEM_NAME MATCHES "Linux") // 注意区分大写
message(STATUS "Linux platorm!")
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
if(CMAKE_CL_64)
message(STATUS "Windows Win64 platform!")
else()
message(STATUS "Windows Win32 platform!")
endif(CMAKE_CL_64)
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
message(STATUS "FreeBSD platform!")
else()
message(STATUS "other platform!")
endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
在CMake里打印信息
message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
(无) = 重要消息
STATUS = 非重要消息
WARNING = CMake 警告, 会继续执行
AUTHOR_WARNING = CMake 警告 (dev), 会继续执行
SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤
FATAL_ERROR = CMake 错误, 终止所有处理过程