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)
浙公网安备 33010602011771号