通过 cmake 重用静态库的自定义 makefile

2024-03-10

我想这将是一个关于在 cmake 中包含具有现有 makefile 的库的通用问题;但这是我的背景 -

我正在尝试包括scintilla在另一个CMake项目中,我遇到以下问题:

在 Linux 上,scintilla 有一个 makefile(比如说)${CMAKE_CURRENT_SOURCE_DIR}/scintilla/gtk目录;如果你跑make在该目录中(像往常一样),您会得到一个${CMAKE_CURRENT_SOURCE_DIR}/scintilla/bin/scintilla.a文件 - (我猜)是静态库。

现在,如果我尝试使用 cmakeADD_LIBRARY,我必须在 cmake 中手动指定 scintilla 的来源 - 而且我不想弄乱它,因为我已经有了一个 makefile。所以,我宁愿称之为通常的闪烁make- 然后指示 CMAKE 以某种方式引用结果scintilla.a. (我想这会not确保跨平台兼容性 - 但请注意,目前跨平台对我来说不是问题;我只想构建 scintilla 作为这个已经使用 cmake 的项目的一部分,仅在 Linux 中)

 

所以,我尝试了一下:

ADD_CUSTOM_COMMAND(
  OUTPUT scintilla.a
  COMMAND ${CMAKE_MAKE_PROGRAM}
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scintilla/gtk
  COMMENT "Original scintilla makefile target" )

...但是,add_custom_command 添加了一个“没有输出的目标"; 所以我尝试了几种方法来构建它,但所有这些方法都失败了(错误作为评论给出):

ADD_CUSTOM_TARGET(scintilla STATIC DEPENDS scintilla.a) # Target "scintilla" of type UTILITY may not be linked into another target.

ADD_LIBRARY(scintilla STATIC DEPENDS scintilla.a) # Cannot find source file "DEPENDS".

ADD_LIBRARY(scintilla STATIC) # You have called ADD_LIBRARY for library scintilla without any source files.
ADD_DEPENDENCIES(scintilla scintilla.a)

 

我显然引用了 cmake 的菜鸟 - 那么,是否有可能cmake运行预先存在的 makefile,并“捕获”其输出库文件,以便 cmake 项目的其他组件可以链接到它?

非常感谢您的任何答复,
干杯!

 

编辑:可能重复:CMake:我如何依赖自定义目标的输出? - 堆栈溢出 https://stackoverflow.com/questions/4066811/cmake-how-do-i-depend-on-output-from-a-custom-target- 然而,这里的破损似乎是由于需要专门有一个librarycmake 项目的其余部分会识别...

  • 另一个相关:cmake - 添加以文件名作为目标的自定义命令 - Thinbug https://stackoverflow.com/questions/5278444/adding-a-custom-command-with-the-file-name-as-a-target;然而,它专门从源文件构建一个可执行文件(我想避免)。

您还可以使用导入的目标和自定义目标,如下所示:

# set the output destination
set(SCINTILLA_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/scintilla/gtk/scintilla.a)
# create a custom target called build_scintilla that is part of ALL
# and will run each time you type make 
add_custom_target(build_scintilla ALL 
                   COMMAND ${CMAKE_MAKE_PROGRAM}
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scintilla/gtk
                   COMMENT "Original scintilla makefile target")

# now create an imported static target
add_library(scintilla STATIC IMPORTED)
# Import target "scintilla" for configuration ""
set_property(TARGET scintilla APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
set_target_properties(scintilla PROPERTIES
  IMPORTED_LOCATION_NOCONFIG "${SCINTILLA_LIBRARY}")

# now you can use scintilla as if it were a regular cmake built target in your project
add_dependencies(scintilla build_scintilla)

add_executable(foo foo.c)
target_link_libraries(foo scintilla)

# note, this will only work on linux/unix platforms, also it does building
# in the source tree which is also sort of bad style and keeps out of source 
# builds from working.  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 cmake 重用静态库的自定义 makefile 的相关文章

  • 如何使用 tmuxinator 在 tmux 中拆分水平窗格内的两个垂直窗格

    目前我的 tmuxinator yml 文件中有这个 windows editor layout main horizontal panes vim server rails s 这给了我两个窗口 一个用于编辑器 另一个用于服务器 在编辑器
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • 使用 C++ 输出字符串覆盖 Linux 终端上的最后一个字符串

    假设我有一个命令行程序 有没有办法让我说的时候 std cout lt lt stuff 如果我不做std cout lt lt n 在另一个之间std cout lt lt stuff 东西的另一个输出将覆盖同一行上的最后一个东西 清理行
  • 对 sf:: 的未定义引用

    我想用 C 制作 GUI 应用程序 发现 SFML 是一个不错的选择 幸运的是 我使用的是 Linux 所以 SFML 2 4 已经安装在我的系统上 所以我开始搜索一些教程并找到了一个制作简单窗口的教程 但是当我运行代码时 出现错误 提示未
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 通过 SSH 将变量传递给远程脚本

    我正在通过 SSH 从本地服务器在远程服务器上运行脚本 首先使用 SCP 复制该脚本 然后在传递一些参数时调用该脚本 如下所示 scp path to script server example org another path ssh s
  • 无法在 Visual Studio 和 vcpkg 中构建 cmake 项目(致命错误 C1083)

    我今天安装了vcpkg 启用了与Visual Studio的集成 即 vcpkg集成安装 并开始安装库 我基本上安装了 cpprestsdk 并触发了 boost 库的安装 然后我在 Visual Studio CMake 中打开该项目 当
  • doxygen INSTALL 无法将文件“.../doxygen/build/bin/doxygen”复制到“/usr/local/bin/doxygen”

    解决了一些之后最初的问题 https stackoverflow com q 50986047 4120196在尝试让 doxygen 工作时 我在遵循以下步骤时偶然发现了下一个错误doxygen安装教程 http www doxygen
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • Gradle 1.3:build.gradle 不构建类

    这里有一个新问题 我有一个 build gradle 文件apply plugin java在其中 并与 java 项目 包关联 当我跑步时gradle build从命令行我得到 compileJava UP TO DATE process
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • libSDL、CMake 和 Mac OS X Lion

    我正在尝试在我的Mac上编译cmake项目 但它取决于SDL框架 我安装了这个框架 在 cmake 之后向我报告找不到 libSDL 我自己设置了以下导出变量 按照 cmake 的建议 export SDL INCLUDE DIR Libr
  • 错误:NVIDIA-SMI 失败,因为无法与 NVIDIA 驱动程序通信

    NVIDIA SMI 抛出此错误 NVIDIA SMI 失败 因为无法与 NVIDIA 通信 司机 确保安装了最新的 NVIDIA 驱动程序并且 跑步 我清除了 NVIDIA 并按照提到的步骤重新安装了它here https askubun
  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James

随机推荐

  • 错误 MSB4185:“System.Globalization.CultureInfo”尚未启用执行

    当尝试使用 Mono for Android 在 MonoDevelop 中构建时 我收到此错误 根据调试 它不在我的代码中 所以我一无所知 任何想法 错误 MSB4185 类型上的函数 CurrentUICulture System Gl
  • ASP.NET Webforms 和 MVC 3 中的成员资格提供程序之间的区别

    Webforms 的 Membership Provider 和 MVC 3 的 Membership Provider 之间的工作方式有区别吗 No 会员资格提供商是System Web Security名称空间 网络表格是System
  • Kafka MirrorMaker2 自动消费者偏移同步

    我正在使用 MirrorMaker2 进行灾难恢复 Kafka 2 7应该支持自动消费者偏移同步 https cwiki apache org confluence display KAFKA KIP 545 support automat
  • CHAR_BIT=4 是 C 标准授权的可能值吗?

    我正在考虑一个非常具体的 现在无用的 处理器 称为saturn http en wikipedia org wiki HP Saturn 28microprocessor 29 该CPU的一个奇怪的特点是它的元素单位是半字节 4位 而不是字
  • C++ 获取 Process.GetCurrentProcess().SessionId

    在c 中 我们可以在Windows中使用此方法获取当前用户进程IDProcess GetCurrentProcess SessionId 我们如何在 C 中做到这一点 Call 获取当前进程ID https msdn microsoft c
  • 如何在上传前检查 iOS 应用程序大小 [重复]

    这个问题在这里已经有答案了 我希望能够在提交到应用程序商店之前检查我的应用程序的大小 更具体地说 我需要知道它是否会低于神奇的 20 MB 以允许蜂窝下载 因为该应用程序是为节日而创建的 这个问题很老了 但在我看来仍然相关 以下是我上传应用
  • 使用 PHP 检查 IPv4/IPv6 地址是否已启动

    我有一个 IPv4 地址 前任 172 19 20 21 我曾经这样做过 fs fsockopen ip port errno errstr 3 if fs error SSC is down return Redirect to gt w
  • ListGetAt 解析 CSV 文件时出现问题

    我有一个脚本 它从客户端读取 CSV 文件 并将这些值拆分为稍后将输入数据库的变量 这是当 CSV 中的列数少于所需的最小值时出现的错误 In function ListGetAt list index delimiters the val
  • 在python中手动绘制树状图

    我已经实现了一种算法来解决图中的聚类问题 我使用 python 库 python graph 来表示该图 现在 在计算的每一步 算法是迭代的 我必须绘制树状图的一部分 事实上 该算法是分裂的 从原始图开始计算簇的意义上来说 现在 我不知道用
  • “gprof”在特定代码行上花费的时间

    我一直在使用gprof分析器结合g 我的代码中有一个函数 它封装了与主要函数足够相关的几个行为部分 因此将它们分成自己的函数是没有意义的 我想知道在每个代码区域花费了多少时间 所以 如果你想象代码看起来像 function A A A B
  • C: IFS System() 漏洞

    出于教育原因 我必须利用 C 代码 该程序首先设置了egid 然后设置了漏洞system usr bin 命令 所以我在我的主目录中创建了一个 usr 可执行文件 并将路径设置为主目录PATH HOME PATH 我想将 bash 中的 I
  • 如何从字符串末尾获取数字

    我对 Ruby 还是个新手 有点卡住了 我需要从字符串末尾获取一个数字 假设我有字符串 potato85 我需要 85 数字中的位数可以有所不同 例如 potato8 potato8585 有什么方法可以分割字符串并获取第一部分和数字吗 使
  • JSON 概念与 JavaScript 和 PHP

    我需要有人来阐明这个问题 当一个人进行 AJAX 调用时 会调用一个 php 脚本 该脚本会回显 json encode 内容 以便 javascript 可以对其进行处理 注意 假设我们在 php 脚本中将 header 设置为 json
  • pudb调试器可以在windows上使用吗?

    我们有可能pudb http pypi python org pypi pudbWindows 上的 python 调试器 如果是 您如何安装并运行它 当我尝试使用安装它时ez setup http peak telecommunity c
  • ruby 如何处理 + 运算符?

    Ruby 不支持递增变量 例如variable 我看到这种行为 2 4 gives 6 事实上 任意数量的 两个变量之间的符号被视为一个单一的 ruby 是如何做到这一点的呢 既然 ruby 这样做了 是否可以将其视为不可用的原因 操作员
  • 同一个父辈下的2个看似独立的观点该如何互动

    请考虑以下场景
  • SQLite 错误:“无法将文本值转换为数值。”

    我找到了解决方法 但我对 Adob e Air 和 SQLite 遇到的问题完全感到困惑 一个UPDATE我认为在开发过程早期工作正常的查询突然开始失败并出现错误details could not convert text value to
  • Xamarin xml android:onClick 回调方法

    这是我的 XML 代码
  • 使路径在 Linux 和 Windows 上都有效

    我怎样才能确保这条路径 new Zend Log Writer Stream APPLICATION PATH logs app log 在linux和windows上都可以工作吗 在Linux中 路径分隔符是 在 Windows 中 可以
  • 通过 cmake 重用静态库的自定义 makefile

    我想这将是一个关于在 cmake 中包含具有现有 makefile 的库的通用问题 但这是我的背景 我正在尝试包括scintilla在另一个CMake项目中 我遇到以下问题 在 Linux 上 scintilla 有一个 makefile