尝试在 Ubuntu 上配置 CMake 工具链

Posted

技术标签:

【中文标题】尝试在 Ubuntu 上配置 CMake 工具链【英文标题】:Trying to configure CMake tool chain on Ubuntu 【发布时间】:2019-09-27 21:34:56 【问题描述】:

该软件最终将在嵌入式 Linux 平台上运行。首先,我们编写了一个库,所有 C 文件在同一个文件夹中,C++ 文件在其下的测试文件夹中。

我的库 交流 b.c MyLib/测试 test.cpp

这适用于 Windows 10,使用 CMakeNinjaCLang 以及 doctest 作为测试框架。所有这些工具都安装在 vcpkg 下。

我现在正在尝试在 Ubuntu 16.04 上配置和运行所有内容。所有工具和源代码均已从我们的存储库中检索到。我尝试构建库并使用 Qt、cmake-gui 和命令行进行测试,但没有成功。

使用CMake-gui,浏览到源和目标后,点击配置按钮会报错

CMake 错误:CMake 无法找到与“Ninja”对应的构建程序。 CMAKE_MAKE_PROGRAM 未设置。

ninja 程序位于 ~/../vcpkg/downloads/tools/ninja-1.8.2-linux/ 文件夹中。

我在尝试从命令行构建时遇到了不同的错误。

是否有任何使用受控工具而不是环境中的配置的示例?

编辑:添加

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

project(PSOC_LIB)

option(BUILD_TESTS "bulid tests project" OFF)

set(psoc_lib_VERSION_MAJOR 0)
set(psoc_lib_VERSION_MINOR 1)
set(psoc_lib_VERSION_PATCH 0)
set(psoc_lib_VERSION "$psoc_lib_VERSION_MAJOR.$psoc_lib_VERSION_MINOR.$psoc_lib_VERSION_PATCH")

set(PROJ_NAME "\"PSOC Library\"") # PROJECT_NAME is a predefined variable
set(PROJECT_DESCRIPTION "\"Crossplatform library for products\"")

configure_file(include/psoc/config.h.in
    $CMAKE_BINARY_DIR/include/psoc/config.h
)

set(SOURCES
# 5 *.c files
    )

add_library(PSOC_LIB $SOURCES)


target_include_directories(PSOC_LIB PUBLIC $CMAKE_CURRENT_SOURCE_DIR/include)
target_compile_definitions(PSOC_LIB PRIVATE _CRT_SECURE_NO_WARNINGS=1)

if (BUILD_TESTS)
    include(CTest)
    enable_testing()
    add_subdirectory(test)
endif (BUILD_TESTS)

test/CmakeLists.txt

cmake_minimum_required(VERSION 3.10)

set(TEST_SOURCES
    test.cpp
)

find_package(doctest CONFIG REQUIRED)

add_executable(test_runner test_runner.cpp $TEST_SOURCES)
target_compile_definitions(test_runner PRIVATE _SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING) #silence warnings about allocator<void> deprecation
target_compile_definitions(test_runner PRIVATE _WIN32_WINNT=0x0601) #target windows 7
target_link_libraries(test_runner PSOC_LIB doctest::doctest)

add_test(all_tests test_runner)

在 Windows 下,即使 BUILD_TESTS 关闭,test 文件夹中的文件也会生成。在 Linux 下,testTesting 文件夹仅在 BUILD_TESTS 为 ON 时创建。

【问题讨论】:

你的路径中有ninja 可执行文件吗?这就是错误消息所说的内容。 没有。我跑了ninja,它说使用sudo apt install ninjaninja-build。我选择了ninja。看起来可执行文件是/usr/sbin/ninja。这是正确的吗? 你的意思是/usr/bin/ninja 吗?子目录sbin/ 用于管理 实用程序(通常需要相应的权限),但ninja 不是此类工具。 没有。 usr/sbin/ninja 是一个 22.9 kB 的程序。相关文本文件显示它是一个守护进程。我在usr/bin 中没有找到任何新文件。 所以你需要安装ninja 构建工具,并确保ninja可执行文件的目录在PATH变量中。 【参考方案1】:

我创建了一个构建可执行测试文件的 shell 脚本。

#!/bin/bash
# Build a debug version of the PSOC_LIB and related tests
mkdir build
cd build
../../../vcpkg_pml/vcpkg/downloads/tools/cmake-3.14.0-linux/cmake-3.14.0-Linux-x86_64/bin/cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -S ../
ninja

【讨论】:

以上是关于尝试在 Ubuntu 上配置 CMake 工具链的主要内容,如果未能解决你的问题,请参考以下文章

CMake 无法找到 SDL2_ttf,我正在尝试以与 SDL2 相同的方式链接它,并且两者都正确安装在 Ubuntu 18.04 上

CMake可以生成配置文件吗?

转载:Ubuntu14.04下升级cmake工具

Vscode 在ubuntu下 cmake-tools提示有误

尝试使用任何 CUDA 功能时出现分段错误

CMake跨平台编译工具