我已经在/ usr / local(包含在/ usr / local / include / boost和库在/ usr / local / lib / boost中)中安装了最新版本的boost,现在我试图从源代码安装Wt cmake(版本2.6)似乎无法find升压安装。 它试图提供有关设置BOOST_DIR和Boost_LIBRARYDIR的有用build议,但是我无法通过调整这些variables来使其工作。 我得到的最新的错误消息是它找不到库,但似乎表明它正在使用“/ usr / local / include”作为包含path,这是不正确的(我可以'似乎修复它)。 有没有人有办法解决这个问题呢?还是我需要在cmake里面找出解决办法?
我正在尝试编写cmake规则来在linux上使用boost.python为python构builddynamic加载的库。 我想用'foo'作为python模块的名字。 所以,图书馆必须被称为foo.so 但默认情况下,cmake使用库命名的标准规则,所以如果我写 add_library(foo foo.cpp) 我会得到libfoo.so输出。 甚至set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar")将创buildlibfoobar.so 。 如何改变这种行为?
所以似乎有很多关于Autotools和CMake的主题的书写,但是对于我来说,我似乎无法find一个关于如何将项目从Autotools转换到CMake的好教程。 有人知道吗?
在一个Makefile中,这可以通过如下方式来完成: g++ -DGIT_SHA1="`git log -1 | head -n 1`" … 这是非常有用的,因为二进制文件知道确切的提交SHA1,所以它可以转储它的情况下,段错误。 我怎样才能达到与CMake相同?
在CMake语义中,“目标”和“命令”之间存在某种区别,这让我们感到困惑。在Makefiles中,没有这样的区别: targetname:dependency command 即目标对应于同名的生成文件。 在CMake中,你有类似于“add_custom_command”和“add_custom_target”这样具有重叠function的命令,即使在官方文档中,语义也是混淆的,即在“添加自定义目标”下的“掌握CMake,第5版” DEPENDS参数设置自定义目标和自定义命令之间的依赖关系。 我的理解是,目标(生成的文件)具有依赖关系(其他文件,生成或不),以及一个命令来实际生成。 说一个目标取决于一个命令是无稽之谈。 更糟的是,有两种types的“add_custom_command”可以将一个额外的命令附加到一个已经存在的目标上,或者将命令吐出来。 有人可以解释为什么这种区别甚至存在?
用CMake构buildBoost库会很好。 这里有各种尝试或正在尝试这样做的项目: Boost.CMake项目自v1.41.0以来没有更新过。 Ryppl项目( http://ryppl.org/ ),但网站现在已经死了。 自2013年以来,大部分Ryppl Github存储库都没有更新。自2013年以来, Ryppl Google Group的stream量并不高。 CMakeModularizationStatus维基页面指出它已经过时并redirect到已经解散的ryppl-dev邮件列表。 https://github.com/boost-cmake似乎被积极维护(截至2017年初)。 它的文档页面很轻, 目前还不清楚是否需要单独下载或复制Boost库。 它显示了一个“为C ++库build议的”标志,所以我们可以认为它还不是一个官方的Boost库组件。 问题是:是否有一个维护,最新的基于CMake的Boost构build目前的工作? [来自原来的问题,date为2013年8月] 我没有find“最好”的做法。 但是有两个好方法: 只要包括你需要的来源,如果这不是一个大问题,也没有太多的来源。 那么不要忘记像“-DBOOST_XXXXX_SOURCE”这样的定义,告诉boost源,他们不应该链接一个库。 (警告将会出现,因为这个macros在某些时候被重新定义了,那么你可以在MSVC的那些文件上忽略C4005,在CLang的时候很遗憾你不能使这个警告无声) 使用CMake的外部项目特性,并使用bjam构build系统的boost(这有一个很长的编译时间很大的不便,这就是为什么你应该去这个,只有当你使用很多boost库) 谢谢你们每一个人的帮助
我正在尝试使用ExternalProject_add()来下载/安装依赖关系。 它安装正常,但我不知道如何实际上链接库后,他们被下载。 我想调用刚刚下载的库的target_link_libraries(),但是库的path会因系统而异。 如果这是一个系统依赖项,我可以调用find_package() – 但是软件包没有安装在默认searchpath中。 我不认为你可以在模块模式下指定find_package的searchpath。 下面是我的CMakeLists.txt的一个不起作用的代码片段: ExternalProject_Add( protobuf URL http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz CONFIGURE_COMMAND <SOURCE_DIR>/configure –prefix=<INSTALL_DIR> PREFIX ${MYPROJ_SOURCE_DIR}/dependencies ) find_package(protobuf REQUIRED) set(LIBS ${LIBS} ${PROTOBUF_LIBRARIES}) target_link_libraries (mybinary ${LIBS})
我需要一些关于如何为CMake自动生成CMakeLists.txt文件的指针/build议。 有谁知道任何现有的发电机? 我检查了CMake Wiki中列出的那些,但不幸的是,它们不适合我。 我已经有一个基本的Python脚本,它遍历我的项目的目录结构,并生成所需的文件,但它现在真的“哑”。 我想扩大它,例如我正在build设的不同平台,我正在使用的编译器\交叉编译器或我可能有不同版本的库依赖项。 我没有太多的CMake专家的经验,我可以基于我的工作或一个已经工作的发电机的例子可以有很大的帮助。
对不起,有很多类似的问题,但我发现谷歌searchCMake查询总是产生类似,但不是相同的场景,冲突CMake命令等! 我需要强制我的项目构build32位的二进制文件,因为我必须链接到一个只有32位的库。 我根据如下错误消息来诊断: /usr/bin/ld: i386 architecture of input file `*external-32bit-lib*' is incompatible with i386:x86-64 output 从我所收集到的,我应该使用: set (CMAKE_CXX_FLAGS "-m32") 这确实改变了事情 – 我现在得到了几个错误,如: /usr/bin/ld: i386 architecture of input file `*project-output-lib*' is incompatible with i386:x86-64 output 而且对于外部库也是一样的错误。 我认为这是因为-m32使gcc生成32位二进制文件,但ld仍然在尝试64位输出? 进一步谷歌search这个问题并没有成功,所以如果任何人都可以certificate我是正确的,并给出了正确的方式做到这一点,我将不胜感激! 非常感谢!
我有一个Makefile的小项目,我试图转换到CMake,主要是为了获得与CMake的经验。 对于这个例子来说,这个项目包含了一个源文件(C ++,虽然我不认为这个语言是特别相关的),还有一个我从其他地方复制过来的静态库文件。 假设参数的缘故,库的源代码不可用; 我只有.a文件和相应的标题。 我手工制作的Makefile包含这个构build规则: main: main.o libbingitup.a g++ -o main main.o libbingitup.a 这工作正常。 我如何告诉CMake重现这个? 不是字面意思,这个确切的makefile,当然,但包括一个等效的链接命令。 我尝试了一些显而易见的方式,比如说 add_executable(main main.cpp libbingitup.a) 要么 add_executable(main main.cpp) target_link_libraries(main libbingitup.a) 以及各种与link_directories(.)或add_library(bingitup STATIC IMPORTED)等东西,但迄今没有任何事情,导致成功的联系。 我该怎么做? 版本细节:Linux上的CMake 2.8.7(Kubuntu 12.04)和GCC 4.6.3