问题标签 [target-link-libraries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
980 浏览

c++ - 添加不存在的目标时强制 CMake target_link_libraries 失败

CMake 有一个令人讨厌的默认值(我想,我在我的 CMake 配置中没有看到任何神奇之处,但我可能是错的,因为我对 CMake 知之甚少)当你将目标添加到项目时,他会默默地忽略该行为,即使该目标没有存在,例如:

项目(堆栈溢出)

// 另一个 CMakeLists.txt

项目(东西)

target_link_libraries(Stuff PUBLIC StackOverlow )

有没有办法强制 CMake 检查您链接的所有项目是否target_link_libraries必须存在?

0 投票
1 回答
43 浏览

java - java.lang.UnsatisfiedLinkError 在 teiid jboss 翻译器开发中从 FesApi 创建 EpcDocument 对象时出现异常

我在尝试使用部署在 Jboss 服务器 java.lang.UnsatisfiedLinkError:com.f2i.energisticsStandardsApi.fesapiJNI.new_common_EpcDocument(Ljava/lang/String;)J at com.f2i 中的 Teiid Translator 读取 EpcDocument 中的 epc 文件时遇到此异常。 com.f2i.energisticsStandardsApi.common.EpcDocument.(EpcDocument.java:42) 上的 energisticsStandardsApi.fesapiJNI.new_common_EpcDocument(本机方法)

我还在 Jboss 的 bat 文件中添加了 DLL 文件(FesapiCpp.1.2.0.0.dll)加载的环境路径变量,如下设置 PATH=%jBOSS_HOME%\modules\system\layers\base\com\f2i\energisticsStandardsApi\main \lib;%PATH%

我正在使用的 fesApi jar 从下面的链接中编译

https://github.com/F2I-Consulting/fesapi

发生的奇怪事情是,当我运行独立程序时,它运行成功,但在 Jboss 环境中它给出了上述异常。

0 投票
0 回答
29 浏览

c++ - 有没有办法在 CMake 中完成目标条件库接口?

我正在编译链接 libif 的多个 C++ 应用程序(app1、app2)。libif 接口的库有两个版本(libV1 libV2)。

根据链接到它的应用程序,我需要 libif 来连接 libV1(对于 app1)xor libV2(对于 app2)。

以下代码旨在描述这种情况。

以下代码旨在描述所需的结果:

是否有任何成语说“CMake 链接/接口库取决于使用它的目标。”?

我认为最简单的 - 虽然不是“漂亮”的解决方案需要我创建 2 个 libif 版本:“libif_libV1”和“libif_libV2”。然后它也会产生任何依赖库的 n 个不同版本。但是有没有更好的方法?这是一个非常罕见的用例吗?

我已经假设生成器表达式不是这项工作的正确工具 - 但也许有一个专门用于这种情况的宏/函数。

0 投票
1 回答
600 浏览

cmake - 如何从 vcpkg 检索 cmake 目标名称?

安装软件包后,vcppkg 非常有帮助地显示相关的 CMake 目标...

包 libwebp:x64-windows 提供 CMake 目标:

但如果你不复制它们,那么你可能再也见不到它们了。至少我找不到他们。有谁知道如何检索已安装软件包的此信息?

0 投票
1 回答
221 浏览

cmake - CMake:基于标志的 target_link_libraries

已经链接了 4 个库,如果 FLAG 为 ON,则希望链接一个新库。

我希望它像

反正有没有在 cmakelists.txt 中实现这个?

0 投票
1 回答
95 浏览

c++ - Cmake将二进制文件的相对路径设置为第三方库

我正在尝试使用 Cmake 制作我的第一个项目,但我遇到了静态链接到 *.so 库的问题。

我的二进制文件只能从构建文件夹中查看库。

我尝试使用“RPATH handling”手册中的这些语句,但到目前为止它不起作用:

与 qmake 相比,我可以将其包含在 pro 文件中:

然后,无论我将二进制文件部署到哪里,一个都将链接到 /lib 文件夹中的库。

谢谢!

0 投票
1 回答
138 浏览

cmake - cmake target_link_libraries(),我们应该什么时候使用?

我是 CMake 的新手,只想了解有关 target_link_libraries 如何工作的一些细节。

要包含一个库,假设是 boost。我们可以简单地做 include_directories(BOOST_LIBRARY_PATH)。这使我的项目能够正确编译并且没有错误报告。

但是在网上看了一些帖子后,我注意到人们通常在包含目录之后添加 target_link_libraries(executable boost_library),所以我只是想知道为什么需要这一行。

由于我的项目在性能方面非常敏感(即,我希望它尽可能快地运行),所以我的问题如下:

(1) target_link_libraries 的实际作用是什么?(2) 如果我们不添加这一行,会不会影响性能?(3) 包含target_link_libraries有什么好处?

0 投票
1 回答
30 浏览

c++ - 当我使用第三方库时,如何找出我需要链接的 lib 文件?

例如,如果我在 opencv 中使用一个函数,我可以使用两种方法来指定库并链接它们。第一个,我可以使用find_package(OpenCV 3.3 REQUIRED) 它们,target_link_libraries( main ${OpenCV_LIBS})因为宏包含我们需要的所有库。第二个,我想在没有“.cmake”的情况下链接我的opencv,我需要给 CMakeLists.txt 一个link_directiories(/xxxx)并使用target_link_libraries(main opencv_core opencv_imgcodecs).

所以我的问题是如何在使用第二种方法时快速找出我应该链接哪个库。就像我在 opencv_core.so 中使用了一些函数一样,但实际上我通过在 opencv 中的许多库中尝试几次就知道了。

0 投票
1 回答
58 浏览

c++ - 在链接到 CMake 目标时运行脚本

我有一种情况,我需要在 CMake 目标链接到时运行脚本,以便它可以在当前项目目录中自动生成用于与库交互的文件。

我知道当您链接到 CMake 目标时,它会自动拉入库的标头,以便它们对编译器可见,但我还需要它在链接对象的目录中生成一些文件,这些文件也将对编译器可见建造。

我如何告诉 CMake 我想运行一个脚本来生成每次my_cmake_target链接到的文件?

CMakeLists.txt 中的链接示例:

我希望该命令在 CMake 根据传递给“target_link_libraries”的目标传递更新包含目录的同时运行。(在任何构建/链接实际发生之前)

有关其工作原理的更多信息,请参见此处:

https://schneide.blog/2016/04/08/modern-cmake-with-target_link_libraries/

使用 target_link_libraries 将 A 链接到内部目标 B 不仅会添加链接到 B 所需的链接器标志,还会添加定义、包含路径和其他设置——即使是传递的——如果它们是这样配置的。

0 投票
0 回答
93 浏览

c++ - CMake 错误:尝试将链接库添加到未在此目录中构建的目标(仅当策略 CMP0079 设置为 NEW 时)

我想将组件“fsm”链接到我的可执行文件(main.cpp)中。“fsm”依赖于“taskmap”。所以我试图弄清楚如何配置 cmake 以正确方式识别我的库,但配置总是失败并出现以下错误:

错误(配置时产生):

我的目录结构:

CMakeLists.txt(顶层):

主/CMakeLists.txt

组件/fsm/CMakeLists.txt

组件/任务图/CMakeLists.txt

我真的不能从这个错误中得到很多,并做了一些研究:

CMake:尝试将链接库添加到未在此目录中构建的目标

这个人试图在顶层 CMakeLists.txt 中使用 target_link_libraries(),即使可执行文件被添加到子 CMakeLists.txt 中。显然 target_link_libraries() 需要从指定目标的 CMakeLists.txt 中调用(除非目录范围保持不变,见下文)。

在子目录中调用 target_link_libraries 的替代方法

此人试图使用 target_link_libraries() 与未在与新创建的目标相同的目录中指定的“链接到”目标(因为输入了新的子目录范围)。我认为这与我的问题有些相关,所以我改用 include() 指令而不是 add_subdirectory(),但错误保持不变

所以到目前为止没有任何帮助。关于我做错了什么的任何线索?