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应用例子
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 例子:
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 的信号函数也写错了。真不走心,居然没人提示他们。是因为没有直接给出完整源码吗? 哈哈
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 的 参数
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)