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)

  

 


posted on   金凯旋  阅读(2428)  评论(0编辑  收藏  举报

编辑推荐:
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 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
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示