使用 Clion (cmake) 开发FreeRTOS

2023-05-16

这里使用的是 f407
1. 先用STM32CubeMX 建立一个可以运行的stm32项目,toolchain选择 SW4STM32
2. 官网下载源码
www.freertos.org
我这里下载的是FreeRTOSv202112.00.zip 
解压缩后得到
需要以下几个文件夹或档案
FreeRTOS/Source下的所有的 .c 档案
FreeRTOS/Source/include
FreeRTOS/Source/portable/GCC/ARM_CM4F
FreeRTOS/Source/portable/MemMang里面的heap_4.c ( 可以参考 FreeRTOS基础二:堆内存管理之heap_4方案_哈士奇上蔚的博客-CSDN博客)
3.. 将 FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK里的FreeRTOSConfig.h拷贝到 FreeRTOS/Source/include 下面
全部需要的档案如下
把FreeRTOS的文件夹放到项目的根目录
4. 修改 FreeRTOSConfig.h
将45行的
#ifdef __ICCARM__
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
修改为
#if defined (__ICCARM__) || defined (__CC_ARM) || defined (__GNUC__)
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
或是直接去掉 #ifdef __ICCARM__的判断
将51行的configUSE_IDLE_HOOK 改为0
将52行的configUSE_TICK_HOOK改为0
将64行的configCHECK_FOR_STACK_OVERFLOW改为0
将66行的configUSE_MALLOC_FAILED_HOOK改为0
5. 修改cmake
在cmake里启用硬件浮点运算单元 FPU
#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
cmake里添加include path
 FreeRTOS/Source/include
 FreeRTOS/Source/portable/GCC/ARM_CM4F
cmake里添加
file(GLOB_RECURSE SOURCES "FreeRTOS/*.*")
6. 将 stm32f4xx_it.c 里的
SVC_Handler
PendSV_Handler
SysTick_Handler
三个方法前面都加上__weak
因为这三个方法在我们添加的 FreeRTOS/Source/portable/GCC/ARM_CM4F/prot.c文件里有定义,会导致重定义
7. 修改main函数运行
以下是代码。完整项目可以在这里下载,硬石YS-F4Pro (f407)开发板可以直接运行
https://download.csdn.net/download/howard789/87177250
cmake
#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.23)

# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER  arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# project settings
project(freeRTOS_demo C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

#Uncomment for software floating point
#add_compile_options(-mfloat-abi=soft)

add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

# uncomment to mitigate c++17 absolute addresses warnings
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")

# Enable assembler files preprocessing
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
    message(STATUS "Maximum optimization for speed")
    add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    message(STATUS "Maximum optimization for speed, debug info included")
    add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
    message(STATUS "Maximum optimization for size")
    add_compile_options(-Os)
else ()
    message(STATUS "Minimal optimization, debug info included")
    add_compile_options(-Og -g)
endif ()

include_directories(
        FreeRTOS/Source/include
        FreeRTOS/Source/portable/GCC/ARM_CM4F

        Core/Inc Drivers/STM32F4xx_HAL_Driver/Inc Drivers/STM32F4xx_HAL_Driver/Inc/Legacy Drivers/CMSIS/Device/ST/STM32F4xx/Include Drivers/CMSIS/Include)

add_definitions(-DUSE_HAL_DRIVER -DSTM32F407xx)

file(GLOB_RECURSE SOURCES "startup/*.*" "Drivers/*.*" "Core/*.*" "FreeRTOS/*.*")

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F407IGTx_FLASH.ld)

add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})

add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")

main

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "bsp_led.h"

#define USE_FREERTOS  //是否使用freeRTOS

//如果要使用freeRTOS需要注意cmake里include要添加
// FreeRTOS/Source/include
//FreeRTOS/Source/portable/GCC/ARM_CM4F
//且GLOB_RECURSE要添加"FreeRTOS/*.*"
//同时以下的这些要取消注释
//add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
//add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
//add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

// 如果不使用freeRTOS,上述的要注释掉


#ifdef USE_FREERTOS

#include "FreeRTOS.h"
#include "task.h"


static TaskHandle_t xHandleTaskLED1 = NULL;
static TaskHandle_t xHandleTaskLED2 = NULL;
static TaskHandle_t xHandleTaskLED3 = NULL;

/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
static void vTaskLED1(void *pvParameters);
static void vTaskLED2(void *pvParameters);
static void vTaskLED3(void *pvParameters);
static void AppTaskCreate (void);

void vTaskLED1(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_1,LED_TOGGLE);
        vTaskDelay(1000);
    }
}

void vTaskLED2(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_2,LED_TOGGLE);

        vTaskDelay(2000);
    }
}

void vTaskLED3(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_3,LED_TOGGLE);

        vTaskDelay(3000);
    }
}

void AppTaskCreate (void)
{
    xTaskCreate( vTaskLED1,   	/* 任务函数  */
                 "vTaskLED1",     	/* 任务名    */
                 512,               	/* 任务栈大小,单位word,也就是4字节 */
                 NULL,              	/* 任务参数  */
                 1,                 	/* 任务优先级*/
                 &xHandleTaskLED1 );  /* 任务句柄  */


    xTaskCreate( vTaskLED2,    		/* 任务函数  */
                 "vTaskLED2",  		/* 任务名    */
                 512,         		/* 任务栈大小,单位word,也就是4字节 */
                 NULL,        		/* 任务参数  */
                 2,           		/* 任务优先级*/
                 &xHandleTaskLED2 ); /* 任务句柄  */

    xTaskCreate( vTaskLED3,     		/* 任务函数  */
                 "vTaskLED3",   		/* 任务名    */
                 512,             		/* 任务栈大小,单位word,也就是4字节 */
                 NULL,           		/* 任务参数  */
                 3,               		/* 任务优先级*/
                 &xHandleTaskLED3 );  /* 任务句柄  */

}

#endif
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

    // 初始化LED
    LED_GPIO_Init();


#ifndef USE_FREERTOS
    // 没有用freeRTOS的测试方法
    LED_GPIO_Test();
#else
    // 使用freeRTOS
    AppTaskCreate();

    /* 启动调度,开始执行任务 */
    vTaskStartScheduler();

#endif

}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}



#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

bsp_led.h

//
// Created by hao on 2022/8/17.
//


#ifndef MY_BASIC_BSP_LED_H
#define MY_BASIC_BSP_LED_H

#include "stm32f4xx_hal.h"

#define LED_1_RCC_CLK_ENABLE()          __HAL_RCC_GPIOH_CLK_ENABLE()
#define LED_1_GPIO_PIN                  GPIO_PIN_9
#define LED_1_GPIOx                     GPIOH

#define LED_2_RCC_CLK_ENABLE()         __HAL_RCC_GPIOE_CLK_ENABLE()
#define LED_2_GPIO_PIN GPIO_PIN_5
#define LED_2_GPIOx GPIOE


#define LED_3_RCC_CLK_ENABLE()          __HAL_RCC_GPIOE_CLK_ENABLE()
#define LED_3_GPIO_PIN                  GPIO_PIN_6
#define LED_3_GPIOx                     GPIOE




typedef enum {
    LED_ON = 0,
    LED_OFF = 1,
    LED_TOGGLE = 2,
}LED_State_TypeDef;


typedef enum {
    LED_ID_1 = 1,
    LED_ID_2 = 2,
    LED_ID_3 = 3,

}LED_ID_TypeDef;


#define IS_LED_ID_TYPEDEF(id)           (((id) == LED_ID_1) || ((id) == LED_ID_2) || (id) == LED_ID_3))
#define IS_LED_State_TypeDef(state)     (((state) == LED_ON) || ((state) == LED_OFF) || ((state) == LED_TOGGLE))

void LED_GPIO_Init();


void LED_StateSet(LED_ID_TypeDef id,LED_State_TypeDef state);

void LED_GPIO_Test();
#endif //USE_LED

bsp_led.c

//
// Created by hao on 2022/8/17.
//

#include "bsp_led.h"
void LED_GPIO_Init(){
    /* 定义IO硬件初始化结构体变量 */
    GPIO_InitTypeDef GPIO_InitStruct;


    LED_1_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_1_GPIOx, LED_1_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_1_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_1_GPIOx, &GPIO_InitStruct);


    LED_2_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_2_GPIOx, LED_2_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_2_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_2_GPIOx, &GPIO_InitStruct);


    LED_3_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_3_GPIOx, LED_3_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_3_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_3_GPIOx, &GPIO_InitStruct);

}



void LED_StateSet(LED_ID_TypeDef id,LED_State_TypeDef state){
    assert_param(IS_LED_ID_TYPEDEF(LEDx));
    assert_param(IS_LED_State_TypeDef(LEDx));
    switch (state) {
        case LED_ON:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_WritePin(LED_1_GPIOx,LED_1_GPIO_PIN,GPIO_PIN_SET);break;
                case LED_ID_2:
                    HAL_GPIO_WritePin(LED_2_GPIOx,LED_2_GPIO_PIN,GPIO_PIN_SET);break;

                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_SET);break;

                default:
                    break;
            }
            break;
        case LED_OFF:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_WritePin(LED_1_GPIOx,LED_1_GPIO_PIN,GPIO_PIN_RESET);
                    break;
                case LED_ID_2:
                    HAL_GPIO_WritePin(LED_2_GPIOx,LED_2_GPIO_PIN,GPIO_PIN_RESET);
                    break;

                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_RESET);
                    break;

                default:
                    break;
            }
            break;

        case LED_TOGGLE:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_TogglePin(LED_1_GPIOx,LED_1_GPIO_PIN);
                    break;
                case LED_ID_2:
                    HAL_GPIO_TogglePin(LED_2_GPIOx,LED_2_GPIO_PIN);
                    break;

                case LED_ID_3:
                    HAL_GPIO_TogglePin(LED_3_GPIOx,LED_3_GPIO_PIN);
                    break;

                default:
                    break;
            }
            break;
        default:
            break;
    }

}

void LED_GPIO_Test(){
    int count =0;
    while (2){

        switch (count%3) {
            case 0:
                LED_StateSet(LED_ID_1,LED_ON);
                LED_StateSet(LED_ID_2,LED_OFF);
                LED_StateSet(LED_ID_3,LED_OFF);


                break;
            case 1:
                LED_StateSet(LED_ID_1,LED_OFF);
                LED_StateSet(LED_ID_2,LED_ON);
                LED_StateSet(LED_ID_3,LED_OFF);

                break;
            case 2:
                LED_StateSet(LED_ID_1,LED_OFF);
                LED_StateSet(LED_ID_2,LED_OFF);
                LED_StateSet(LED_ID_3,LED_ON);

                break;
            default:
                break;
        }
        count++;
        if(count==1000)count=0;
        HAL_Delay(1000);
    }

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Clion (cmake) 开发FreeRTOS 的相关文章

  • 在cmake中设置boost的最低版本

    我想定义系统上可用的最低增强版本 我尝试了以下方法 不幸的是 这不起作用 因为它尝试在系统上仅提供 boost 1 40 0 的情况下进行编译 SET Boost USE STATIC LIBS OFF SET Boost USE MULT
  • 如何将 Zlib 与 Cmake 链接

    我试图将我的文件与 zlib 库链接 但仍然得到 对 deflateInit 的未定义引用 我目前正在使用CLion 已从主页下载了zLib文件并将其添加到项目中 这就是我的 CmakeLists txt 的样子 cmake minimum
  • CMake:执行宏/函数作为add_custom_command的命令

    我正在使用一个外部库 它提供了用于自动代码生成的 CMake 函数 以在我的 CMakeLists 中使用 问题是 每当我修改 CMakeLists 时 该函数都会再次运行 从而触发新生成但未更改的源的重新编译 我需要像 add custo
  • 找不到 boost_process cmake find_package

    我正在尝试将 boost 库导入到我的 C 项目中 由于某种原因 它找不到 Boost Process 尽管它找到了其他库 我的 CMakeLists txt 文件 cmake minimum required VERSION 3 9 FA
  • CMake 依赖于自定义目标中的“所有”目标

    我正在制作一个需要以一种奇特的方式打包的库 作为其中的一部分 我有一个包含以下几行的脚本 only install the lib component nd put in the a special directory ADD CUSTOM
  • 强制 target_link_libraries 使用 C++ 链接器

    TL DR 将静态 c 库链接到 c 可执行文件时 有没有办法强制 cmake 使用 c 链接器 我有一个静态库 由 2 个对象组成 一个 C 文件和一个该文件中函数的 C 包装器 构造函数 析构函数和打印函数 类似于this https
  • 将 CMake 与具有钻石依赖项的库一起使用

    假设我有四个独立的项目 三是图书馆 Common Foo and Bar 其中之一是可执行文件 App Both Foo and Bar依赖于公共库 并且App依赖于取决于Foo and Bar 此外 其中一些项目有一些脚本需要运行来生成一
  • CMake:如何禁用单个 *.cpp 文件的优化?

    我想禁用 CMake 项目中单个 cpp 文件的优化 我发现 CMake 提供了以下功能来实现此目的 SET SOURCE FILES PROPERTIES FILE PROPERTIES COMPILE FLAGS O0 然而 这似乎对我
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 使用 cmake 构建项目后如何运行 ctest

    我希望每次成功构建项目时都启动测试 如果某些测试被破坏 我希望我的构建也被破坏 默认情况下 我需要通过运行来手动运行测试ctest命令 CTest 实际上可以构建项目 但我使用调用的 IDEmake建立资源 和make不运行测试 我将此命令
  • 如果构建是源代码外的,CMake 无法找出标头依赖项?

    我一直在使用 CMake 来管理一个单独的小型 c 项目 基于 Unix Makefile 并决定将其转换为更有组织的源代码外构建 但是 当它超出源时 通过执行cmake 在 build 中 我的标头不再是其源文件的依赖项 如果我只是从顶层
  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • 输出字符串末尾的空白不与字符串一起打印,而是与其后的下一个打印行一起打印

    我尝试打印一行 要求用户输入 获取输入 然后再次打印一些行 问题是 在我获得输入后 第一个打印行末尾的空白不是打印在该行的末尾 而是打印在第二个打印行的开头 我对 C 完全陌生 所以我不能真正尝试太多 但我尝试在没有提示用户输入的部分的情况
  • CMake 占位符如何工作?

    在 CMake 的支持库中 您将看到如下所示的命令定义 set CMAKE ASM ASM DIALECT COMPILE OBJECT
  • 如何安装和使用 YAML-Cpp

    我想学习 YAML 并将其与 C 一起使用 但我一直在尝试设置YAML Cpp 让我解释一下到目前为止我所做的事情 我下载了源代码 版本0 5 1 安装的 Cmake 适用于 Windows 安装了 Boost 库 为 Visual Stu
  • 如何以编程方式迭代所有 CMake 目标?

    有没有办法从顶层获取 CMake 项目的所有目标CMakeLists txt 即以编程方式迭代目标 我想要这样做的原因是将一些 XCode 特定设置应用于每个目标 if CMAKE GENERATOR MATCHES Xcode inclu
  • CMake:将为 lib 构建的对象文件重用到另一个 lib 目标中

    我正在尝试将我的项目转移到CMake 同时对编译过程进行一些优化 这是交易 我有几个子目录 必须 每个子目录都编译成静态库 这有效 我想将每个子目录中的所有目标文件收集到另一个更大的 完整的静态库中 它看起来像这样 libBig a mad
  • Cmake 链接到共享库找不到​​库

    在 Ubuntu 上 我有两个目录 build and src In src my CMakeLists txt文件有以下几行 add executable Test main cpp target link libraries Test
  • 使用已安装的 CMake 而不是 Visual Studio 2017 中嵌入的 CMake

    我有一个 CMake 项目 它使用实际安装的 CMake 版本 3 11 0 rc2 支持的最新版本 Boost 1 66 0 但在之前的版本 3 10 0 中不受支持 如果我从命令行使用 CMake 构建它 一切正常 但如果我在 Visu
  • 在 Clion 中更改 CMake 语法颜色

    我安装了 CLion 并自定义配置了深色主题 以便长时间盯着屏幕时眼睛更舒服 我能够更改 C 语法配置的每种颜色 但 CMake 的颜色选项不存在 并且 CMake 的默认颜色是非常深的橄榄色 需要我睁大眼睛才能阅读 CMake 以代码样式

随机推荐

  • Friendlycore增加inodes数量

    背景 xff1a 为Nanopim1安装了core系统 xff0c tf卡大小64G xff0c 安装后正常扩展到了整个tf卡 xff0c 但是在安装hass的docker显示磁盘空间不够 xff0c 最终发现是inode被用完了 其ino
  • UORB

    转载地址 xff1a http blog arm so armteg pixhawk 183 0503 html Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixh
  • rCS启动脚本分析

    转载地址 xff1a http wellmakers com p 61 401 还有一篇很重要的文章 xff0c 讲述了整个系统的大致启动过程 xff1a http blog chinaunix net uid 29786319 id 43
  • PID通俗解释

    转载地址 xff1a http blog gkong com liaochangchu 117560 ashx PID是比例 积分 微分的简称 xff0c PID控制的难点不是编程 xff0c 而是控制器的参数整定 参数整定的关键是正确地理
  • Kali Linux中安装Xfce的步骤2-1

    Kali Linux默认安装的是桌面环境是Gnome xff0c 可以通过以下方法在Kali Linux中安装Xfce xff0c 从而修改其桌面环境 1 Xfce介绍 Xfce是XForms Common Enviroment的简写 其可
  • STM32CubeMX教程之简介及基本使用

    STM32CubeMX是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言代码 xff0c 支持多种工具链 xff0c 比如MDK IAR For ARM TrueStudio等 尤
  • Linux 文件流与目录流管理

    Linux 应用开发 04 文件流与目录流管理 本课目标 1 编程目标 xff1a a 实现磁盘文件的拷贝操作 b 缓冲区类型对磁盘真正写入操作的影响 2 理解文件流操作以及缓冲区概念 3 掌握ansi c 文件流相关操作函数 4 理解与掌
  • tensorflow InvalidArgumentError: Cannot serialize protocol buffer of type tensorflow.GraphDef 错误分析

    训练nfm模型 xff0c 每2000个step进行保存 一开始模型训练正常 xff0c 但是在使用tf train Saver的save方法保存模型时出现了如下错误 xff1a tensorflow python framework er
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 八款值得尝试的精美的Linux发行版,你用过哪几款?

    Linux发行版各式各样 xff0c 每个发行版都有自己的特点 xff0c 在这篇文章中 xff0c 将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版 xff0c 包括对初学者友好和流行的发行版 elementary
  • VINS-mono 解析 生成用于回环检测的字典文件

    VINS回环检测使用的是FAST xff08 Features from Accelerated Segment Test xff09 特征点检测 xff0c 并利用BRIEF描述子存储特征 挑选了两个实时性较好的检测和描述 BRIEF提供
  • 将git下载的c++项目用vs打开

    首先确定下载的项目里包括CMakeLists txt的文件 然后在文件所在目录用cmd或power shell输入以下命令 以2017版本为例 cmake G 34 Visual Studio 15 2017 Win64 34 中间那个 表
  • 用 verilog 实现 minst 数字识别

    用verilog实现minst 的数字识别 可以用modelsim看结果 如果要部署到fpga上 PL的资源要非常非常多 代码下载 包含5个仿真文件 https download csdn net download howard789 13
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境
  • 4自由度机械臂正逆解公式推导与代码实现

    视频链接 四自由度机械臂逆解抓取 含代码 哔哩哔哩 bilibili 代码 import math P 61 7 5 A1 61 12 1 A2 61 8 2 A3 61 8 2 A4 61 18 5 MAX LEN 61 A2 43 A3
  • 无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0) 解决办法

    将 SolidSQUAD 的Program Files里的所有文件夹覆盖到安装目录下 xff0c 如果是默认安装 xff0c 就是复制到C Program Files SOLIDWORKS Corp下 xff08 而不是C Program
  • 打开被独占的文件方法(二) -- 修改句柄访问权限

    打开被独占的文件方法 二 修改句柄访问权限 2010年06月08日 星期二 11 40 来自 xff1a http hi baidu com wsh chb blog item 1dfafadd4da473d48d1029a8 html 修
  • 将点云坐标转换成世界坐标的demo

    pcl calib cfg usr bin env python PACKAGE 61 34 depth camera calib 34 NODENAME 61 34 depth camera calib 34 from dynamic r
  • Clion开发stm32 无法使用printf (undefined reference to `_sbrk‘)

    原因是因为arm none eabi编译器为了节省空间 删减了一部分代码 导致有些方法只有声明没有实现 xff0c 只要在项目中添加实现的代码就可以了 xff0c 使用 weak修饰语 xff0c 如果其他地方有实现就自动失效 在项目中新建
  • 使用 Clion (cmake) 开发FreeRTOS

    这里使用的是 f407 1 先用STM32CubeMX 建立一个可以运行的stm32项目 xff0c toolchain选择 SW4STM32 2 官网下载源码 www freertos org 我这里下载的是FreeRTOSv202112