手里有个C++的CMake工程,想要针对不同的平台编译,包括Windows,Linux,macOS。其中Linux又包含了x64,arm32(树莓派)和arm64(Jetson Nano)。没有相应的设备怎么办?Travis CI提供了各种操作系统和CPU指令集的虚拟机,可以满足需求。
配置CMakeLists.txt
我手里有5个不同平台的动态链接库:
- x64 Windows
- x64 Linux
- ARM32 Linux
- ARM64 Linux
- macOS
分别放在5个目录里。
现在需要在CMakeLists.txt
中根据不同的条件来链接不同的库。
首先区分操作系统:
if (CMAKE_HOST_WIN32)
set(WINDOWS 1)
elseif(CMAKE_HOST_APPLE)
set(MACOS 1)
elseif(CMAKE_HOST_UNIX)
set(LINUX 1)
endif()
然后用CMAKE_SYSTEM_PROCESSOR
来区分处理器:
if(WINDOWS)
MESSAGE( STATUS "Link directory: ${PROJECT_SOURCE_DIR}/platforms/win/lib/" )
link_directories("${PROJECT_SOURCE_DIR}/platforms/win/lib/")
elseif(LINUX)
if (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
MESSAGE( STATUS "Link directory: ${PROJECT_SOURCE_DIR}/platforms/linux/" )
link_directories("${PROJECT_SOURCE_DIR}/platforms/linux/")
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR ARM32_BUILD)
MESSAGE( STATUS "L