
CMake
文章平均质量分 54
FlushHip
凝视深渊
展开
-
CMake的整型变量之简单的数学运算
CMake中是没有整型变量这一说法的,字符串是CMake的基石,这也能理解,毕竟CMake是用来方便构建项目用的,整那些数学运算意义不大,但是有的时候就有那么一点点需求,比如,统计一下某个目录下生成了多少target。这里我们使用CMake中的mathhttps://cmake.org/cmake/help/latest/command/math.html,它可以实现简单的数学运算,由于需要统计数目,因此这里就需要自增操作:set(cnt 0)# ...math(EXPR cnt "${cnt}原创 2022-03-24 16:52:42 · 1924 阅读 · 0 评论 -
Windows下VS Code设置CMakeTools调试有输入的程序
Windows下,不管是使用VS Code进行本地调试还是远程调试,调试有输入的程序都不会出现输入窗口。先给解决方案。打开setting.json,添加如下代码: "cmake.debugConfig": { "console": "integratedTerminal" }其实这里使用"console": "externalConsole"对于本地调试来说也是没有问题的,但是远程调试是出不来的。点击下方状态栏的小蜘蛛或者直接Ctrl + F5调试。即可解决CMak原创 2021-03-12 15:21:29 · 2694 阅读 · 3 评论 -
CMake在Windows上运行一个带有动态库的可执行程序
由于Windows上不支持Linux上的共享库运行时查找机制(说的就是rpath或者runpath)。那么在Windows上,运行一个带有动态库的可执行程序的最简单方法就是把dll和exe放一起(可执行程序所在目录就是Windows查找动态库必搜索的目录之一)。粗暴一点的方法就是把所有的CMake输出文件都放一个目录去,那么dll和exe也就一定在同一目录;优雅的方法就是,在可执行文件的生成后事件中把动态库拷贝到可执行文件输出目录。粗暴set(CMAKE_RUNTIME_OUTPUT_DIRECTO原创 2021-03-11 19:26:15 · 1926 阅读 · 0 评论 -
CMake在64位Linux平台上生成32位程序
首先,如果是C语言,需要确定是否安装了gcc-multilib;如果是C++,需要确定是否安装了g++-multilib。假设Linux平台是Ubuntu发行版,使用C++。sudo apt install g++-multilib然后就是对CMake的设置了。这里分为两个部分,对整个CMake项目设置,对单个Target设置。对单个Targettarget_compile_options(${TARGET_NAME} PUBLIC $<$<PLATFORM_ID:Linux>原创 2021-03-11 19:24:53 · 4044 阅读 · 0 评论 -
CMake适配VS Code调试有标准输入的程序
本文的背景是使用CMake Tools来调试带有标准输入的程序,遇到的问题是CMake Tools目前不能提供一个额外的输入窗口来进行输入,这是目前这个插件的缺陷。目前我解决这个问题的方式是适用freopen来重定向输入到文件。利用条件编译在CMake中添加对应的宏。但是这样会在代码中引入一些不起作用的代码,不美观,不过也是没有办法的事。项目结构如下所示:FlushHip E:\experimentlab\..\..\L6.12 git: master ≣ +0 ~2 -0 ! ❯❯❯ ls原创 2021-03-11 19:22:54 · 1013 阅读 · 0 评论 -
CMake获取当前目录名以及获取上层目录名
CMake中有两个变量,可以获取到当前CMakeLists.txt的当前目录名(绝对路径)和当前文件的绝对路径,分别是CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_FILE。但是,有时候需要的往往是相对路径名。比如我们编写项目的一些样例,以当前文件夹的名字作为target名,同时还需要把生成的target按照上层目录名来分组,例如下列目录结构:examples |- base |- string |- CMakeLists.txt |- bas原创 2021-03-11 19:19:45 · 34912 阅读 · 1 评论