草庐IT

language-cmake

全部标签

linux - 强制 CMake 使用完整的库路径

我有以下问题。我在我的Linux机器上有一个单独的{bin,lib,include}树,其中安装了CMake和我开发工作所需的所有库。但是只有PATH环境变量被设置到这个bin目录并且由于多种原因我无法设置LD_LIBRARY_PATH。此树中的所有程序都是使用RPATH构建的。我正在使用的CMake3.3.1也在这棵树中。现在的问题我想用libcurl编译一个程序,设置如下CMakeLists.txtPROJECT(EXAMPLE)CMAKE_MINIMUM_REQUIRED(VERSION2.8)SET(CMAKE_SKIP_BUILD_RPATHFALSE)FIND_PACKAG

linux - 为 CMake 中的build设置链接器搜索路径

似乎这个问题以前经常被问到,但似乎没有一个解决方案适用于我的情况。我在CMake/Linux环境中,必须在build步骤(特别是protoc)期间运行可执行二进制文件。此二进制文件需要一个库,但它未安装(也不可能)在标准目录(如/usr)中,因此找不到该库。不幸的是,我无法操纵protoc调用,因为它嵌入在第3方脚本中。我现在可以在每个make之前设置LD_LIBRARY_PATH或在系统范围内设置它,但这非常不方便,尤其是在涉及构建发生的IDE或分布式构建时具有连续构建环境的场景。我试图通过设置LD_LIBRARY_PATHset(ENV{LD_LIBRARY_PATH}"/path

c++ - 命令行中缺少 DSO(使用 CMake)

我正在尝试通过使用Cmake再次编译所有内容,将一个c++项目从Windows转换为Debian。我不太习惯在Linux上工作,但我已经设法正确安装了所有东西。这是错误:/usr/bin/ld:../shared/libshared.a(BigNumber.cpp.o):undefinedreferencetosymbol'BN_new@@OPENSSL_1.0.2d'//usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2:erroraddingsymbols:DSOmissingfromcommandline这实际上似乎是一个常见问题,但我不知道如

c++ - 无法更改 CMake 中的默认链接器

我正在尝试将我的链接器更改为ld.gold以便我可以构建LLVM和CLANG更快。我已经更改了我的环境变量:exportLD=ld.gold并且我已经将ccmake中的CMAKE_LINKER更改为/usr/bin/ld.gold。然而,当我生成文件时,我的链接器被检测为GNUld。运行上衣在编译期间确认正在运行的是ld而不是gold。将CMake链接可执行变量编辑为:cmake-DCMAKE_LINKER=/usr/bin/ld.gold-DCMAKE_CXX_LINK_EXECUTABLE="-o"-G"UnixMakefiles"../llvm我收到以下错误:/usr/bin/l

linux - CMake 错误 : The following variables are used in this project, 但它们被设置为 NOTFOUND

我正在尝试使用tar文件whalebot-0.02.00.tar.gz配置whalebot爬虫。我已经正确提取它:root@Admin1:~/dls#tarxvzfwhalebot-0.02.00.tar.gz之后我想配置它:root@Admin1:~/dls/whalebot#./configure它给我错误:bash:./configure:Nosuchfileordirectory我也运行了命令:root@Admin1:~/dls/whalebot#cmake./它给了我以下结果:root@Admin1:~/dls/whalebot#cmake./--TheCcompilerid

c++ - Windows 上的 Cmake 不添加共享库路径(适用于 linux)

我在Linux上使用CMake和Eclipse已有一段时间,并且一直在处理包含大量可执行文件和共享对象的多个目标项目。我使用非源代码构建,在Linux上,二进制文件被放入它们自己的目录中。当我在linux上执行此操作时,eclipse能够以某种方式找到共享对象并正常运行可执行文件,但在Windows上不会发生这种情况。在Windows上,我必须添加一个指向dll的PATH环境变量,或者我可以构建到单个bin和lib目录中(尽管我在过去使用CMake时忘记了一个问题,这让我想避免这种情况)。为什么这在Windows和Linux上的工作方式不同?这是我缺少的设置还是这不起作用?构建本身运行

linux - CMake:不要为链接中使用的单个库设置 rpath

我想做的是配置我的CMakeLists文件,以便在构建我的项目时,链接器使用驻留在我的构建树中的共享库(.so)的副本来链接可执行文件,但随后不设置链接可执行文件中的rpath,以便系统必须在加载程序请求时提供库。具体来说,我想在构建期间在未将libOpenCL.so作为系统库安装的构建场上链接到libOpenCL.so。为此,libOpenCL.so位于项目构建树中,并使用CMakeLists文件中的绝对路径进行引用。这个绝对路径是为了确保如果系统碰巧安装了libOpenCL.so则不会使用它。但是,当运行最终的可执行文件时,CMake已将绝对路径添加到rpath,这会阻止系统版本的

c++ - 关于在 Linux 下组织源代码和构建 C++ 开发的建议(CMake 作为生成器)

有人可以提出一些在Linux下使用C++时组织源文件和管理构建的良好做法吗?我使用CMake来管理我的构建,尽管此时我不使用复杂的结构。假设我们有以下三种情况。1.对于makefile应用程序,只需从简单的.cpp和.h文件构建一些可执行文件2.创建一个使用其他流行共享库的静态/共享库说例如OpenCV和OpenGL。3.更复杂的类型,例如,假设我们需要创建一个可执行文件,其源文件使用外部库,如OpenCV,也使用我们自定义的静态库已经建立了我们自己(例如,一个自定义的静态库与我们的相关header使用上面的步骤2构建)。我相信你们中的许多人从事复杂的库项目,其中构建过程并不那么简单。

c++ - CMake - 不同目标的不同包含目录?

我正在使用CMake在Linux中开发一个C++项目。我正在创建两个库,LibA和LibB。我不希望LibA和LibB具有相同的包含目录。有什么方法可以只设置LibA以包含DirectoryA并仅设置LibB以包含DirectoryB?编辑:LibA和LibB都将在可执行文件MyExe中使用。当我在MyExe的源代码中#includeLibA.h和LibB.h时,我无法从DirectoryA和DirectoryB共存于MyExe中,因为这会产生命名空间冲突。这可能吗?编辑2:这是我的CMakeLists.txtinclude_directories(包含)add_library(Lib

linux - 使用 cmake 从整个项目创建一个静态库

c++-project,例如,foo由cmake维护。人们想要创建一个库libfoo.a(在整个源代码树中创建所有类/方法/函数),以便创建可以使用-lfoo.好的,现在让我们考虑一个玩具示例,问题会很清楚。目录foo(项目的根目录)包含目录a和b。创建了两个CmakeLists.txt:#a/CMakeLists.txtadd_library(A)#b/CMakeLists.txtadd_library(B)还有一个CMakeLists.txt用于根目录:add_subdirectory(a)add_subdirectory(b)add_library(footarget_link_