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)

  

 


posted on 2021-08-01 10:41  金凯旋  阅读(2284)  评论(0编辑  收藏  举报

导航