尝试在 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,使用 CMake、Ninja 和 CLang 以及 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 下,test
和 Testing
文件夹仅在 BUILD_TESTS
为 ON 时创建。
【问题讨论】:
你的路径中有ninja
可执行文件吗?这就是错误消息所说的内容。
没有。我跑了ninja
,它说使用sudo apt install ninja
或ninja-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 上