Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake对象库目标使用语法_Cmake - Fatal编程技术网

CMake对象库目标使用语法

CMake对象库目标使用语法,cmake,Cmake,说明(其他)目标可以使用$语法引用对象库(其中objlib是对象库的名称): add_library要求您列出链接器构建库所需的文件。因为您使用的是对象库,所以没有可供foo参考的最终对象,只有一组对象 想象一个稍微复杂一点的场景: add_library(foo OBJECT fooA.cpp fooB.cpp ) add_library(bar SHARED barA.cpp barB.cpp ) add_library(spaz SHARED foo bar

说明(其他)目标可以使用
$
语法引用对象库(其中
objlib
是对象库的名称):


add_library
要求您列出链接器构建库所需的文件。因为您使用的是对象库,所以没有可供
foo
参考的最终对象,只有一组对象

想象一个稍微复杂一点的场景:

add_library(foo OBJECT 
  fooA.cpp
  fooB.cpp
)

add_library(bar SHARED 
  barA.cpp
  barB.cpp
)

add_library(spaz SHARED
  foo
  bar
)
对于
spaz
指令,
bar
指单个
条。因此,
(或DLL或任何东西)由相应的
add_库链接,但是
foo
指的是什么?有两个文件,
fooA.o
fooB.o
,因此cmake需要使用生成器表达式来收集这些文件

我不确定是否有技术原因导致cmake无法支持对象库的速记,但当前的解决方案利用了现有的生成器表达式

add_library(foo OBJECT 
  foo.cpp
)

add_library(bar SHARED 
  bar.cpp
  foo
)
add_library(foo OBJECT 
  fooA.cpp
  fooB.cpp
)

add_library(bar SHARED 
  barA.cpp
  barB.cpp
)

add_library(spaz SHARED
  foo
  bar
)