linux –使用cmake重用静态库的自定义生成文件

电脑杂谈  发布时间:2020-05-24 21:07:37  来源:网络整理

cmake 引用静态库_makefile 引用静态库_cmake 静态库

本文由Script House收集并编译,主要介绍linux –使用cmake重用静态库的自定义makefile. Script House编辑认为这非常不错. 现在,我将与您分享并提供参考. 让我们一起跟随脚本编辑室的编辑,看看吧!

我认为这将是关于在cmake中包含现有makefile的库的一个普遍问题;但这是我的背景-

我试图将scintilla包含在另一个CMake项目中,但存在以下问题:

cmake 静态库_makefile 引用静态库_cmake 引用静态库

在Linux上,scintilla在$ {CMAKE_CURRENT_SOURCE_DIR} / scintilla / gtk目录中有一个makefile;如果您像往常一样在该目录中运行make,则将获得$ {CMAKE_CURRENT_SOURCE_DIR} / scintilla / bin / scintilla.a文件–我猜这是一个静态库.

现在,如果我尝试使用cmake的ADD_LIBRARY,则必须手动在cmake中指定闪烁体的来源-我不想弄乱它,因为我已经有了一个makefile. 因此cmake 静态库,我宁愿调用普通的scintilla品牌-然后指示CMAKE以某种方式引用生成的scintilla.a. (我认为这不能确保跨平台兼容性–但是请注意,当前跨平台对我来说不是问题;我只想将scintilla生成为已经使用cmake Part的项目,仅在Linux中使用)

所以,我尝试了这个:

cmake 引用静态库_makefile 引用静态库_cmake 静态库

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-so引用了一个菜鸟,是否有可能让cmake运行一个预先存在的makefile并“捕获”其输出库文件,以便cmake项目的其他组件可以链接它?

非常感谢您提供任何答案cmake 静态库,

干杯!

cmake 引用静态库_cmake 静态库_makefile 引用静态库

编辑: 可以重复: CMake: 我如何依赖自定义目标的输出? –堆栈溢出–但是,这里的损坏似乎是由于需要一个特殊的库而导致的,其余的cmake项目将认识到...

>另一个相关内容: cmake –添加一个以文件名为目标的自定义命令– Stack Overflow;但是,它专门从源文件构建可执行文件(我想避免).

最佳答案

您还可以使用导入的目标和此类自定义目标:

# 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.  

以上是脚本库为您收集的Linux –使用cmake重用静态库的自定义makefile的全部内容,希望本文可以帮助您解决Linux问题–使用cmake重用静态库问题的自定义生成文件.

如果您认为Script House网站的内容不错,欢迎向程序员朋友推荐Script House网站.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-220918-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...