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

时间:2013-06-15 18:47:56

标签: linker cmake

我有第三方库的不同预编译版本(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)

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

1 个答案:

答案 0 :(得分:4)

使用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()
不过,我的例子是CMake 2.8,你必须调整2.6的测试。