Cmake 的路径设置
设置库文件的输出路径,dll 和 lib 的输出:
1 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG e:/tmp/bin/debug) # 设置exe文件路径 2 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE e:/tmp/bin/release) 3 4 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG e:/tmp/bin/debug) # 设置静态库路径 5 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE e:/tmp/bin/release)
6 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG e:/tmp/bin/debug) # 设置lib库路径
7 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE e:/tmp/bin/release)
设置exe文件的输出路径:
1 set(EXECUTABLE_OUTPUT_PATH e:/tmp/bin/debug)
一个极简的lib 库cmake应用例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | cmake_minimum_required(VERSION 3.14) project(libtest LANGUAGES CXX) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED ON) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/libd" ) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/lib" ) set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/libd" ) set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/lib" ) add_library(libtest SHARED libtest_global.h ibase.cpp ibase.h cbase.cpp cbase.h ) if (CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Debug" )) file (COPY ibase.h libtest_global.h DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}) else () file (COPY ibase.h libtest_global.h DESTIONATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}) endif() target_compile_definitions(libtest PRIVATE LIBTEST_LIBRARY) |
调用上述 lib 库的 cmake 例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | cmake_minimum_required(VERSION 3.5) project(uselibtest LANGUAGES CXX) set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED ON) # 以下两种方式可选一种 #target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/lib") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.. /libtest/lib ) add_executable(${PROJECT_NAME} main.cpp) #以下两种方式均可,如果没有使用全路径lib库,仅仅使用lib库名,则需要将该库copy 到 exe 执行目录下,才可以编译通过 #find_library(lib_var libtest "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/lib") #target_link_libraries(${PROJECT_NAME} ${lib_var}) target_link_libraries(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/../libtest/lib/libtest.lib" ) |
使用QRPC时,总是不能顺利生成rep source端的对应文件, 终于找到了bug, 问题解决。 顺带说一句,qt 的说明文档里,把QTimer 的信号函数也写错了。真不走心,居然没人提示他们。是因为没有直接给出完整源码吗? 哈哈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | cmake_minimum_required(VERSION 3.14) project(client LANGUAGES CXX) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CMAKE_AUTOUIC ON) set (CMAKE_AUTOMOC ON) set (CMAKE_AUTORCC ON) set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 COMPONENTS Core RemoteObjects REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core RemoteObjects REQUIRED) set (SOURCES main.cpp simpleswitch.cpp ) qt5_generate_repc(SOURCES simpleswitch.rep SOURCE) add_executable(client ${SOURCES} ) target_link_libraries(client Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::RemoteObjects) |
RPC的副本端cmake文件,区别主要是 生成repc 的 参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | cmake_minimum_required(VERSION 3.14) project(server LANGUAGES CXX) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CMAKE_AUTOUIC ON) set (CMAKE_AUTOMOC ON) set (CMAKE_AUTORCC ON) set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 COMPONENTS Core RemoteObjects REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core RemoteObjects REQUIRED) set (SOURCES main.cpp client.cpp ) qt5_generate_repc(SOURCES ${CMAKE_SOURCE_DIR}/.. /rep/simpleswitch .rep REPLICA) add_executable(server ${SOURCES} ) target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::RemoteObjects) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~