CMake指令合集

开始标配

# 指定编译的最小版本
cmake_minimum_required(VERSION 3.0.0) 

# 指定解决方案的名字 和版本
project(<SOLUTION_NAME> VERSION 0.1.0)


# 设置c++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置c++17
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
else() # gcc clang
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
endif(MSVC)

# 设置Release or Debug 默认值
if(NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE Debug)
endif()

# 生成pdb调试信息
IF(MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
ENDIF()

# 设置MacOS 平台目标
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10)

# 增加子目录
add_subdirectory(<子目录路径>)


# 从文件夹从获取文件的决定路径
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.ui")

# 添加可执行项目
add_executable(<target> ${SOURCE_FILES})
# 添加动态库
add_library(<target> SHARED ${SOURCE_FILES})

#添加编译选项(下面是添加以utf-8解码,避免中文跨平台乱码)
if(MSVC)
	target_compile_options(13_6 PUBLIC "$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
endif(MSVC)

#设置vs为宽字符
target_compile_definitions(<target> PRIVATE UNICODE _UNICODE)


# 添加包含目录
target_include_directories(<target> PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           ${EXTRA_INCLUDES}
)

# 添加库目录
target_link_directories(<target> PUBLIC ${CMAKE_SOURCE_DIR}/sdk/win/lib)
# 添加库文件
target_link_libraries(<target> PRIVATE 
CURL::libcurl  # 外部库,通过find_package()等命令搜索到的
findall polarssl # 外部库,可以在库目录添加库搜索路径,这样就不用给出全路径,文件名后缀也不用
debug ${PYTHON_LIBRARY}/python37_d
optimized ${PYTHON_LIBRARY}/python37
)
############################################
# 这里,常见的依赖库可能是以下几种情况:
# 1.在此次编译的工程里添加的目标,给出目标名;
# 2.外部库,给出路径和库文件全名;
# 3.外部库,通过find_package()等命令搜索到的
##########################################

# 添加依赖
ADD_DEPENDENCIES(main a.so b.so)


# 1.设置可执行文件的输出路径:
message(status ____________"${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}")
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}")
# 设置动态库输出路径
SET(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}) 


# 打印所有变量 
function(print_directory_variables dir)
    # Dump variables:
    get_property(_variableNames DIRECTORY ${dir} PROPERTY VARIABLES)
    list (SORT _variableNames)
    foreach (_variableName ${_variableNames})
        get_directory_property(_variableValue DIRECTORY ${dir} DEFINITION ${_variableName})
        message(STATUS "DIR ${dir}: ${_variableName}=${_variableValue}")
    endforeach()
endfunction(print_directory_variables)

# for example
print_directory_variables(.)


# 添加生成后事件
add_custom_command(
TARGET hitpawInstaloader POST_BUILD
COMMAND echo "cp ${LIBPYTHON} ${EXECUTABLE_OUTPUT_PATH}"
COMMAND cp "${LIBPYTHON}" "${EXECUTABLE_OUTPUT_PATH}"
)



qt简单模板

  cmake_minimum_required(VERSION 3.1.0)

project(sample_4_5 VERSION 1.0.0 LANGUAGES CXX) //注意LANGUAGES指定了CXX,就不能用c语法了,编译器会把函数名称按照c++的方式粉碎,这样就找不到c语法函数的符号了,即使用了extern "C"也没有,解决办法是不指定语言,因为默认就是c++和c都支持的,或者填 CXX AND C也行

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

if(CMAKE_VERSION VERSION_LESS "3.7.0")
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()


find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(HEADERS 
    Sample_4_5.h
)

set(SOURCES 
    main.cpp
    Sample_4_5.cpp
)

set(RESOURCES 
    Sample_4_5.qrc
)

set(UI
	Sample_4_5.ui
)


add_executable(${PROJECT_NAME}  ${HEADERS} ${SOURCES} ${RESOURCES} ${UI})


target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

posted @ 2022-12-21 15:57  乘舟凉  阅读(129)  评论(0编辑  收藏  举报