首页 > 解决方案 > 使用 ToolChain.cmake 链接 C++ 库

问题描述

我有以下情况:

我正在尝试将一些 C++ 库集成到现有软件(也是用 C++ 编写的)中。README 文件提供了一些关于如何作为客户端开发的指南,并以以下ToolChain.cmake文件为例:

# Example ToolChain.cmake
set(CMAKE_C_COMPILER /usr/bin/clang-8)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE)

另一方面,我有以下CMakeLists.txt文件,它成功编译链接了我想要的库。

cmake_minimum_required(VERSION 3.5)
project(osi_messages_test)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


add_executable(${PROJECT_NAME} src/TCP_Client.cpp)

# Load the Protobuf module and fail if not found
find_package(Protobuf REQUIRED)

# Add 
add_subdirectory(open-simulation-interface)


get_directory_property(OSI_VERSION_MAJOR DIRECTORY open-simulation-interface DEFINITION VERSION_MAJOR)

set(OSIVERSION "${OSI_VERSION_MAJOR}.${OSI_VERSION_MINOR}.${OSI_VERSION_PATCH}")

target_link_libraries(${PROJECT_NAME} open_simulation_interface)

我的问题是,如何将此CMakeLists.txt文件集成到ToolChain.cmake文件中?如果我尝试将其粘贴到ToolChain.cmake文件中,则会收到以下错误消息:

CMake Error at HAD/HADClient/ToolChain.cmake:1 (project):
  Language 'C' is currently being enabled.  Recursive call not allowed.
Call Stack (most recent call first):
  HAD/HADClient/build/CMakeFiles/3.16.3/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:2 (project)


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

编辑:

这就是我的调用方式cmake(如软件自述文件中所述)。

cmake \
    -G "Ninja" \
    -DCMAKE_BUILD_TYPE=Client \
    -DLIBCARLA_BUILD_RELEASE=ON \
    -DLIBCARLA_BUILD_DEBUG=OFF \
    -DLIBCARLA_BUILD_TEST=OFF \
    -DCMAKE_TOOLCHAIN_FILE=/path/to/ToolChain.cmake \
    -DCMAKE_INSTALL_PREFIX=/path/to/install-folder \
    /path/to/carla-root-folder

现在它做了应该做的事情,我想我正在将构建文件发送到另一个目录,而不是构建。

标签: c++cmaketoolchain

解决方案


推荐阅读