c++ - 使用 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
现在它做了应该做的事情,我想我正在将构建文件发送到另一个目录,而不是构建。
解决方案
推荐阅读
- javascript - 如何从数据集中选择一组值以使用 D3.js 而不是整个数据集绘制折线图
- java - Comparator.comparing 没有推断出正确的输入类型
- javascript - 阿拉伯语不打印 Epson TM-T20II
- postgresql - 使用 pg dump 时遇到问题
- java - 运行没有摄像头的模拟器
- c++ - 以人类可读的格式存储结构成员
- reactjs - 分配 redux 操作时,单击按钮不起作用
- python - 按时间戳对数据帧进行排序,同时保持与连续行相同的 ID
- c - 将二维数组传递给函数并在工作完成后返回二维数组
- docker - 在某个命令上从另一个容器运行新的 docker 容器(服务)