首页 > 其他分享 >一个CMake的例子

一个CMake的例子

时间:2024-05-07 14:22:21浏览次数:18  
标签:std CMake 一个 void 例子 DIR table include condition

首先编写4个文件:

1、CMakeLists.txt内容:

cmake_minimum_required(VERSION 3.15)

project(Demo)

include_directories(${PROJECT_BINARY_DIR}/headers)
aux_source_directory(${PROJECT_BINARY_DIR}/sources SRC_DIR)

add_library(dynamic_library SHARED ${SRC_DIR})
add_library(static_library STATIC ${SRC_DIR})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/libs)

add_executable(demo_dynamic main.cc)
target_link_libraries(demo_dynamic dynamic_library)

add_executable(demo_static main.cc)
target_link_libraries(demo_static static_library)

add_compile_options(-std=c++17)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

  

 

2、sources/foo.cc内容:

#include <functional>
#include <iostream>

void (*fp1)() = []() {};
void (*fp2)() = []() { std::cout << "In fp2" << std::endl; };

  

3、headers/bar.h内容:

#include <functional>
#include <iostream>

void fp3() { std::cout << "In fp3" << std::endl; };

  

4、main.cc内容:

#include <functional>
#include <string>
#include <unordered_map>

#include "bar.h"

extern void (*fp1)();
extern void (*fp2)();
extern void fp3();

void calltable(
    const std::string &condition,
    std::unordered_map<std::string, const std::function<void(void)>> &table) {
  if (table.count(condition)) {
    table[condition]();
  }
}

int main(int argc, char *argv[]) {
  std::unordered_map<std::string, const std::function<void(void)>> table{
      {"1", fp1},
      {"2", fp2},
      {"3", fp3},
  };
  std::string condition = "1";
  calltable(condition, table);
  condition = "2";
  calltable(condition, table);
  condition = "3";
  calltable(condition, table);
}

  

然后编译、运行:

cmake . && make
./bin/demo_dynamic
./bin/demo_static

  

标签:std,CMake,一个,void,例子,DIR,table,include,condition
From: https://www.cnblogs.com/qiandeheng/p/18177142

相关文章

  • 5.6为一个activity编写一个滚动界面的.java文件
    packagecom.example.yibaifen;importstaticandroidx.core.content.ContentProviderCompat.requireContext;importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivity;importandroidx.recyclerview.widget.DividerItemDecoration;importandro......
  • 如何实现一个简单易用的 RocketMQ SDK
    2018年,做为架构负责人,接到一个架构需求:实现一个简单易用的RocketMQSDK。因为各个团队RocketMQ原生客户端配置起来千奇百怪,有的配置存在风险,各团队负责人都需要一个简洁易用的RocketMQSDK。我立马调研相关开源的方案,当时RocketMQ-Spring项目并没有开源,而阿里云的ONS......
  • 顺序栈实现进制转换 和 通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串
    /********************************************************************************************************** filename: Zqh_栈实现.c* author : [email protected]* date : 2024/05/05* function: 顺序栈实现进制转换和通过键盘输入一个包括'('和')'......
  • Hello world! 记我的第一个随笔
    Hello,大家好啊,这是我在博客园写的第一个随笔,之前基本上都是在csdn和github上进行写东西的,最近突然想建立一个自己的博客,这样的话就可以写一点除了技术和经验以外的其他杂事了。把这个当是一个记事本吧,有当作一个交朋友的途径,维护好自己的小博客也是很有成就感的捏( ̄▽ ̄)*欢迎大家和......
  • vue3.4中KeepAlive的一个bug
    KeepAlive可以缓存组件,在不使用include时没有任何问题,可以正常缓存。但是一旦使用了include,如果动态组件中没有导入ref函数,缓存功能就消失了比如editcom.vue<template><input></template><scriptsetup>import{ref}from'vue'</script><style></style&g......
  • 删除字符串中与另一个字符串中的相同字母的自定义函数
    #include<stdio.h>/********************************************************************* 函数名称: str_DestDel* 函数功能:删除一个字符串中与另一个字符串中的相同字母并且不区分大小写* 函数参数:* @strA 需要操作的字符串* @strB 作为参考的字......
  • 主页和一个详情页完全成功(5个代码)(样式,有动画)
    C文件夹布局网页存放/│├──app.py#Flask应用├──templates/#存放HTML文件│├──index.html#主页│└──upload.html#详情页├──static/│├──css/││└──styles.css......
  • CMake中里的find_package与find_library有什么区别?
    在CMake中,find_package和find_library都是用来找到和链接库的方法,但它们的用法和适用场景略有不同。find_package主要用于寻找具有CMake配置文件的库,这些库通常遵循CMake的规范,提供了用于导入目标、库路径、头文件路径等的配置文件。这使得使用find_package更加简洁,只需指定需......
  • 【cmake】find_package设置查找路径
     1.find_package的作用与实例用来查找第三方依赖包的.cmake文件,并根据.cmake文件生成依赖包的头文件目录和库文件路径等;CMakeLists.txt实例find_package(ProtobufREQUIRED)include_directories(${PROTOBUF_INCLUDE_DIR})add_executable(mainsrc/main.cpp)target......
  • 一个惊艳的 python 库:PyWebIO,用 Python 写网站
    大家好,今天给大家介绍另一个简单而强大的web库--PyWebIO,它能让你的Python脚本快速拥有一个交互式的网页界面。想象一下,你不需要懂得前端开发,就能创建出用户友好的网页应用,今天,我们就来聊聊PyWebIO,看看它如何让Pythonweb开发变得更加简单有趣。为什么选择PyWebIO?1. 快速开发......