无法使用 cmake 找到目标文件 link_directories

Can not find object file with cmake link_directories

我想向 link 进程添加几个 .o 文件。如果我这样做:

TARGET_LINK_LIBRARIES(FFMPEGTest stdc++fs -pthread /home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o ...some more stuff... )

然后它找到了文件。所有这些文件都在同一个目录中,所以我想同时添加它们:

link_directories(/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/)
TARGET_LINK_LIBRARIES(FFMPEGTest stdc++fs -pthread audioconvert.o ...some more stuff... )

但这不起作用:

/usr/bin/ld: cannot find -laudioconvert.o

我该如何解决这个问题?

Documentation for target_link_libraries 不允许 相对路径 (audioconvert.o) 作为该命令的参数。它应该是 绝对路径 (/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o) 或 普通库名称 (如 z for libz.a 图书馆)。

因为目标文件 audioconvert.o 不是库,所以不能用 普通库名 指定。您别无选择,只能为目标文件指定 绝对路径

要在某个目录中指定多个目标文件,您可以使用 foreach 循环:

foreach(obj audioconvert.o foo.o bar.o)
  target_link_libraries(FFMPEGTest /home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/${obj})
endforeach()

实际上,每个参数<param>target_link_libraries,看起来都不像绝对路径(而且不对应库target ), 转换为 linker 的 -l<param> 选项。

linker 将此参数解释为 普通库名称searches 用于名为 lib<param>.a 或 [=22] 的文件=] 在 link 目录中。

因此,使用参数 -laudioconvert.o,linker 搜索名称为 libaudioconvert.o.a 的文件 - 显然,这不是您想要的。