我想这将是一个关于在 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;然而,它专门从源文件构建一个可执行文件(我想避免)。