Questions tagged «cmake»

CMake是一个跨平台的开源构建系统生成器。它生成用于构建系统的文件,例如用于多个集成开发环境的本机makefile,ninja-build和项目文件。



1
CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的差异
从Wiki: CMAKE_CURRENT_SOURCE_DIR 这是当前处理的CMakeLists.txt所在的目录 CMAKE_CURRENT_LIST_DIR (自2.8.3起),这是当前正在处理的列表文件的目录。 从文档中: CMAKE_CURRENT_SOURCE_DIR:当前正在处理的源目录的路径。这是cmake当前正在处理的源目录的完整路径。 CMAKE_CURRENT_LIST_DIR:当前正在处理的列表文件的完整目录。当CMake处理项目中的列表文件时,此变量将始终设置为当前正在处理的列表文件(CMAKE_CURRENT_LIST_FILE)所在的目录。该值具有动态范围。当CMake开始处理源文件中的命令时,它将此变量设置为该文件所在的目录。当CMake完成文件中的命令处理后,它将恢复以前的值。因此,宏或函数中变量的值是调用调用堆栈最底部条目的文件的目录,而不是包含宏或函数定义的文件的目录。 在什么情况下这些变量将具有不同的值?
104 cmake 



4
如何使用CMake?
我正在尝试使用CMake来编译opencv。 我正在阅读教程,但无法理解什么是CMakeLists文件以及如何将其连接到CMake的GUI? 也无法理解什么是makefile,它们与CMakeLists一样吗? 最终我通过visual-studio打开哪个文件?
102 c++  visual-studio  cmake 

7
使用CMake将文件从源目录复制到二进制目录
我正在尝试在CLion上创建一个简单的项目。它使用CMake(我是这里的新手)来生成Makefile来构建项目(或某种形式) 每次运行代码时,我需要做的就是将一些非项目文件(某种资源文件)传输到二进制目录。 该文件包含测试数据,应用程序打开它以读取它们。我尝试了几种方法来做到这一点: 通过 file(COPY ... file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/input.txt DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/input.txt 看起来不错,但它只能工作一次,下次运行后不会重新复制文件。 通过 add_custom_command OUTPUT 版 add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/input.txt COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/input.txt ${CMAKE_CURRENT_BINARY_DIR}/input.txt) TARGET 版 add_custom_target(foo) add_custom_command( TARGET foo COMMAND ${CMAKE_COMMAND} copy ${CMAKE_CURRENT_BINARY_DIR}/test/input.txt ${CMAKE_SOURCE_DIR}) 但是,没有人能奏效。 我究竟做错了什么?
100 cmake 

1
CMake target_link_libraries接口依赖项
我是CMake的新手,对与相关的PUBLIC,PRIVATE和INTERFACE关键字有点困惑target_link_libraries()。文档中提到它们可用于在一个命令中同时指定链接依赖性和链接接口。 链接依赖关系和链接接口实际上是什么意思?
99 cmake 

9
如何使用CMake将DLL文件复制到与可执行文件相同的文件夹中?
我们使用CMake在SVN中生成源代码的Visual Studio文件。现在,我的工具要求某些DLL文件与可执行文件位于同一文件夹中。DLL文件位于源旁边的文件夹中。 如何更改我的名称CMakeLists.txt,以使生成的Visual Studio项目在release / debug文件夹中已经具有特定的DLL文件,或者在编译时将其复制?
98 dll  cmake 

3
如何使用CMAKE_INSTALL_PREFIX
我想生成带有安装目标的Makefile,将其安装到/ usr而不是默认的/ usr / local。假设构建目录在源子目录中完成,我执行: cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. CMakeCache.txt包含:(CMAKE_INSTALL_PREFIX:PATH=/usr确定?) 现在我执行: 使 进行安装 所有文件仍安装在usr / local中。怎么了? 编辑:在任何CMakeLists.txt项目文件中没有CMAKE_INSTALL_PREFIX。在运行cmake之前,我将从输出目录中删除所有内容。CMakeLists.txt中的安装指令如下所示: install(TARGETS mylibrary DESTINATION lib)

7
如何在CMake中将字符串拆分成多行?
我的项目中通常有一个策略,就是永远不要在文本文件中创建超过80行长度的行,因此可以在各种编辑器中轻松地编辑它们(您知道这很重要)。但是,使用CMake时遇到的问题是,我不知道如何将一个简单的字符串拆分为多行以避免出现一条大行。考虑以下基本代码: set(MYPROJ_VERSION_MAJOR "1") set(MYPROJ_VERSION_MINOR "0") set(MYPROJ_VERSION_PATCH "0") set(MYPROJ_VERSION_EXTRA "rc1") set(MYPROJ_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}") 它已经超过了80行限制。那么,如何在CMake中将一行分成多行而不引起冗长(多个list(APPEND ...)等)?
96 cmake 

8
如何构建和安装GLFW 3并在Linux项目中使用它
GLFW3 昨晚我工作很晚,试图从源代码为Linux构建GLFW 3软件包。这个过程花了我很长时间,总共约3个小时,部分是因为我不熟悉CMake,部分是因为我不熟悉GLFW。 我希望这篇文章能使您摆脱昨天遇到的麻烦!我以为我应该写些简短的文章,并希望为您节省几个小时的生活... 多亏了#glfw IRC频道上的“ urraka”,“ b6”和“ niklas”,我才能够使用glfw 3.0.1版。 事实证明,这并不是一个微不足道的过程(肯定不是我一个人,我也不是专家),因为网上关于glfw3的文档很少,尤其是有关使用CMake进行设置的文档。 我被要求将其分为一个问答部分,所以我做到了,答案部分现在在下面。 您是GLFW的维护者,还是GLFW团队的成员? 如果GLFW3的任何维护者看到此消息,那么我给他们的信息是,请在您的网站上添加“在Windows,Mac OS X和Linux上设置GLFW3”部分!使用GLFW编写程序非常容易,因为在线文档非常好,可以快速扫描所有可用的类和模块,您就可以开始使用。这里特色的测试项目的例子也很好。我发现的两个主要问题是,第一,如何在系统上设置GLFW3,第二,如何构建GLFW3项目?对于非专家来说,这两件事可能还不够清楚。 编辑 今天(日期:2014年1月14日)进行了简要介绍,看来自我上次浏览以来,GLFW网站发生了重大变化,现在有一节介绍如何使用GLFW编译GLFW和构建程序,我认为这是新的。
95 linux  build  install  cmake  glfw 

1
CMake如何使用?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 众所周知,作为初学者,很难获得有关CMake的任何有用信息。到目前为止,我已经看了一些关于如何建立一些非常基础的项目或其他项目的教程。但是,这些都无法解释任何背后的原因是他们中所示,总是留下许多孔,以填补。 在CMakeLists上调用CMake 是什么意思?每个构建树应该调用一次还是什么?如果它们都使用来自相同来源的相同C​​MakeLists.txt文件,如何为每个内部版本使用不同的设置?为什么每个子目录都需要自己的CMakeLists文件?在项目根目录以外的CMakeLists.txt上使用CMake是否有意义?如果是这样,在什么情况下?指定如何从自己子目录中的CMakeLists文件构建可执行文件或库与在所有源根目录的CMakeLists文件中执行文件之间有什么区别?我-G可以在调用CMake时更改选项,就可以为Eclipse和Visual Studio创建一个项目吗?那就是它的用法吗? 到目前为止,我从未见过的教程,文档页面或问题/答案都无法提供任何有用的见解,以帮助您了解如何使用CMake。这些例子只是不彻底的。无论阅读什么教程,我都觉得自己缺少了一些重要的东西。 像我这样的CMake新手会问很多问题,这些问题并没有明确地询问,但显而易见,作为新手,我们不知道如何处理CMake或如何处理它。
95 cmake 

3
如何告诉CMake链接源目录中的静态库?
我有一个带有Makefile的小项目,我正尝试将其转换为CMake,主要是为了获得CMake的经验。就本示例而言,项目包含一个源文件(C ++,尽管我认为该语言不是特别重要)和一个静态库文件,该文件是我从其他地方复制来的。出于争论的考虑,假设该库的源代码不可用;我只有.a文件和相应的标头。 我手工制作的Makefile包含以下构建规则: 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)等等的各种事物,但到目前为止,没有任何事物能够成功实现链接。我该怎么办? 版本详细信息:具有GCC 4.6.3的Linux(Kubuntu 12.04)上的CMake 2.8.7

3
如何在命令行设置CMake option()
我创建了一个CMakeLists.txt,其中包含以下内容 project(P4V) cmake_minimum_required(VERSION 2.6) option(BUILD_STATIC_LIBS "Build the static library" ON) option(BUILD_SHARED_LIBS "Build the shared library" ON) option(BUILD_TESTS "Build test programs" OFF) include_directories(${CMAKE_SOURCE_DIR}/include) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) set(CMAKE_BUILD_TYPE Release) add_subdirectory(src) if(BUILD_TESTS) add_subdirectory(tests) endif(BUILD_TESTS) 默认情况下,BUILD_TESTS为OFF,如何在没有CMake GUI的情况下将cmake命令本身打开?我尝试了以下操作,但不起作用 cmake .. -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON
93 cmake 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.