一、cmake功能介绍
二、CMakeLists编写介绍
$ENV{
系统变量} $ENV{
PATH}
5.指定可执行文件生成路径:
SET(EXECUTABLE_OUTPUT_PATH "xxx/bin")
6.指定输出动态库的目录位置:
SET(LIBRARY_OUTPUT_PATH "xxx/lib")
7.获取源代码、头文件路径:
FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp") FILE(GLOB HEAD_LIST "${PROJECT_SOURCE_DIR}/include/*.h")
8.添加头文件路径:
include_directories("${PROJECT_SOURCE_DIR}/include")
9.添加链接库路径:
link_directories("${PROJECT_SOURCE_DIR}/lib")
10.添加生成可执行文件:
add_executable(${PROJECT_NAME} ${SRC_LIST} ${HEAD_LIST})
11.链接库名:
target_link_libraries(${PROJECT_NAME} ${LIB_NAME})
12.添加生成动态库或静态库: 不写默认静态库
add_library(${LIB_NAME} SHARED ${PROJECT_SOURCE_DIR}/third/test.cpp) add_library(${LIB_NAME}_static STATIC ${PROJECT_SOURCE_DIR}/third/test.cpp)
13.静态库的输出名称:
set_target_properties(${LIB_NAME}_static PROPERTIES OUTPUT_NAME ${LIB_NAME})
14.设置预处理宏开关 开启:
option(USE_TEST "option for test" ON)
15.配置一个头文件用于传递一些CMake中的配置到源代码中
configure_file("${PROJECT_SOURCE_DIR}/config.in" "${PROJECT_SOURCE_DIR}/config.h")
install(TARGETS myrun mylib mystaticlib RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
16.2安装整个目录
install(DIRECTORY ${OUT_PATH} DESTINATION ${PROJECT_SOURCE_DIR}) install(DIRECTORY ${OUT_PATH} DESTINATION ${PROJECT_SOURCE_DIR} PATTERN "${EXE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
16.3安装文件
install(FILES "${PROJECT_BINARY_DIR}/bin/${EXE_NAME}" DESTINATION "${PROJECT_SOURCE_DIR}/bin" PATTERN "${EXE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) install(FILES "${PROJECT_BINARY_DIR}/lib/lib${LIB_NAME}.a" DESTINATION "${PROJECT_SOURCE_DIR}/lib") install(FILES "${PROJECT_BINARY_DIR}/lib/lib${LIB_NAME}.so" DESTINATION "${PROJECT_SOURCE_DIR}/lib")
三、CMakeList构建Qt工程
1.设置开启MOC UIC RCC编译器
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
2.添加qt模块 添加头文件路径 依赖库路径 库名称 Findxxx.cmake xxxConfig.cmake
find_package(Qt5Widgets CONFIG REQUIRED) target_link_libraries(${
PROJECT_NAME} Qt5::Widgets) <NAME>_FOUND <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES <NAME>_LIBRARIE or <NAME>_LIBRARIES or <NAME>_LIBS <NAME>_DEFINITIONS =================================== find_package(PkgConfig) pkg_search_module(Qt5Widgets REQUIRED Qt5Widgets) target_link_libraries(${
PROJECT_NAME} ${
Qt5Widgets_LIBRARIES}) ===================================================== (pkg-config xxx a.默认usr/bin/*.pc b.读取环境变量PKG_CONFIG_PATH c.pkg-config --variable pc_path pkg-config ) (动态库 a.LD_LIBRARY_PATH b./etc/ld.so.conf c./lib or /usr/lib)
四、CMakeList添加第三方库
1.编写编译安装脚本 命名为uchartdet_install.sh
cd libiconv-1.16 path=”`pwd`/../lib” #生成路径自己指定 ./configure --enable-extra-encodings --prefix=$path --enable-static --disable-shared make make install
2.在第三方库third目录下编写CMakeList.txt
execute_process(COMMAND bash "${CMAKE_CURRENT_SOURCE_DIR}/uchartdet_install.sh" WORKING_DIRECTORY ${
CMAKE_CURRENT_SOURCE_DIR})
3.在上级CMakeList.txt添加add_subdirectory(third)
相关demo文档下载:https://download.csdn.net/download/wml00876/
简单demo
#最低cmake版本 cmake_minimum_required(VERSION 3.0) #项目名 project(aqp) #引入文件 file(GLOB HEADS "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp") file(GLOB SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.qrc") #添加Qt模块 find_package(Qt5Core REQUIRED) find_package(Qt5Widgets REQUIRED) #创建可执行文件 add_executable(aqp ${
HEADS} ${
SRCS} ) #引用路径,包含编译给定目标时需要使用的目录 target_include_directories(${
PROJECT_NAME} PUBLIC ${
Qt5Core_INCLUDE_DIRS} ${
Qt5Widgets_INCLUDE_DIRS} )
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229994.html原文链接:https://javaforall.net
