CMake:根据操作系统和架构链接预编译库

Joh*_*ohn 1 linker cmake

我有不同的预编译版本的第 3 方库(Windows/Linux/Mac,32/64 位)。它必须包含在项目文件中,以将在其他系统上编译的要求保持在最低限度,因为我不能指望几年后可以下载它。静态和动态版本都可用,但没有源。

我应该如何将它链接到我的,CMakeLists.txt以便依赖项main.cpp在所有系统上编译?它适用于不同的 Linux 发行版吗?

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(ExampleProject)
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs)
ADD_EXECUTABLE(Test main.cpp)
TARGET_LINK_LIBRARIES(Test lib1_win32)
Run Code Online (Sandbox Code Playgroud)

这适用于 Windows,但显然不考虑不同的操作系统和体系结构。我知道 的替代方案LINK_DIRECTORIES,这只是一个例子。

Gui*_*ume 6

使用 CMAKE_SYSTEM_NAME 测试操作系统,使用 CMAKE_SIZEOF_VOID_P 测试它是 32 位还是 64 位:

if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    if (${CMAKE_SIZEOF_VOID_P} MATCHES "8")
        target_link_libraries(Test lib1_linux64)
    else()
        target_link_libraries(Test lib1_linux32)
    endif()
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    if (${CMAKE_SIZEOF_VOID_P} MATCHES "8")
        target_link_libraries(Test lib1_win64)
    else()
        target_link_libraries(Test lib1_win32)
    endif()
# ETC
endif()
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我的示例是针对 CMake 2.8,您必须针对 2.6 调整测试。