Tag: cmake

我怎样才能build立一个C + +项目与多个相互依存的子目录?

我有一个C ++项目,我用目录作为更多的组织元素 – 可以使用Java中的包或PHP中的目录。 目录并不是要成为自给自足的元素,而只是组织整个项目的一种方式,不让我被来源所压倒。 我怎样才能构build我的CMakeLists.txt文件来处理这个? 制作目录库在这里似乎不太合适,因为它们都是相互依赖的,并不打算以这种方式使用。 作为一个相关的问题,我见过的CMake中的多个子目录的大多数例子(并不是很多)忽略或掩盖了设置include_directories的问题,这是我一直遇到的问题。 短的梳理我的源文件,以确定哪个文件取决于哪个和哪个目录,有没有办法将/src/下的所有目录设置为潜在的包括目录,并让CMake确定哪些是实际依赖? 这是一个示例结构: –src –top1 –mid1 –bot1 –src1.cpp –hdr1.h –bot2 –src2.cpp –hdr2.h –mid2 –bot3 –src3.cpp –src4.cpp –hdr3.h –top2 –mid3 –src5.cpp –hdr4.h 等等等等。 我怎样才能构build我的CMakeLists.txt文件来处理这种结构?

CMake输出/build立目录

我对cmake非常陌生,阅读了一些关于如何使用它的教程,并编写了一些复杂的50行CMake脚本,以便为3个不同的编译器编写一个程序。 这大概就是我在cmake上的所有知识。 现在我的问题是,我有一些源代码,我的文件夹,我不想碰/混乱,当我做的程序。 我想要所有的cmake,并把输出文件和文件夹放到../Compile/中,所以我在cmake脚本中改变了一些variables,并且在我的笔记本电脑上做了这样的工作, Compile$ cmake ../src Compile$ make 在那里,我有一个干净的输出在我现在正在的文件夹,这正是我正在寻找。 现在我转移到另一台电脑,并重新编译CMake 2.8.11.2,我几乎回到了一个! 它总是将这个东西编译到我的CMakeLists.txt所在的src文件夹中。 我在cmake脚本中select目录的部分是这样的: set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/) set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir}) set(CMAKE_BUILD_FILES_DIRECTORY ${dir}) set(CMAKE_BUILD_DIRECTORY ${dir}) set(CMAKE_BINARY_DIR ${dir}) SET(EXECUTABLE_OUTPUT_PATH ${dir}) SET(LIBRARY_OUTPUT_PATH ${dir}lib) SET(CMAKE_CACHEFILE_DIR ${dir}) 现在它总是以: — Build files have been written to: /…/src 我错过了什么吗?

如何使用CMake的CCache?

我想这样做:如果CCache存在于PATH中,请使用“ccache g ++”进行编译,否则使用g ++。 我试图写一个小的my-cmake脚本包含 CC="ccache gcc" CXX="ccache g++" cmake $* 但它似乎并没有工作(运行make仍然不使用ccache;我检查了这个使用CMAKE_VERBOSE_MAKEFILE)。 更新: 按照这个链接,我尝试改变我的脚本 cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $* 但cmake救了抱怨,使用编译器ccachetesting失败(可以预料)。

如何使用CMAKE_INSTALL_PREFIX

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

CMake:如何build立外部项目并包括他们的目标

我有一个项目A导出一个静态库作为目标: install(TARGETS alib DESTINATION lib EXPORT project_a-targets) install(EXPORT project_a-targets DESTINATION lib/alib) 现在我想使用项目A作为项目B的外部项目,并包含其构build的目标: ExternalProject_Add(project_a URL …project_a.tar.gz PREFIX ${CMAKE_CURRENT_BINARY_DIR}/project_a CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> ) include(${CMAKE_CURRENT_BINARY_DIR}/lib/project_a/project_a-targets.cmake) 问题是当项目B的CMakeLists运行时,包含文件还不存在。 有没有办法让包括依赖外部项目正在build设?

最简单但是完整的cmake例子

不知何故,我完全被CMake的工作困惑。 每次我想我越来越接近了解CMake是如何写的,在我读到的下一个例子中就消失了。 所有我想知道的是,我应该如何构build我的项目,以便我的CMake将来需要最less的维护。 例如,我不想在我的src树中添加一个新文件夹时更新我的​​CMakeList.txt,这个文件夹与所有其他src文件夹完全一样。 这就是我想象我的项目结构的方式,但是这只是一个例子。 如果推荐的方式不同,请告诉我,并告诉我如何去做。 myProject src/ module1/ module1.h module1.cpp module2/ […] main.cpp test/ test1.cpp resources/ file.png bin [execute cmake ..] 顺便说一下,我的程序知道资源在哪里是很重要的。 我想知道推荐的资源pipe理方式。 我不想通过“../resources/file.png”来访问我的资源

如何在CMake中检索用户环境variables(Windows)

我知道如何在CMAKE中使用一个普通的机器环境variables $ENV{EnvironmentVariableName} 但我无法检索用户特定的环境variables。 这是可能的和如何?

CMake没有findVisual C ++编译器

在安装Visual Studio 2015并在以前的项目上运行CMake之后,cmake错误指出找不到C编译器。 The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_CXX_COMPILER could be found. 我在Visual Studio文件夹C:\Program Files\Microsoft Visual Studio 14.0searchcl.exe ,并找不到它。 如何设置CMake以使用Visual Studio 2015在Windows上工作?

CMake如何工作?

我不是问自己。 我希望这个问题能成为许多像我一样喜欢我的新手的参考,对于这样一个小小的CMakeLists.txt文件,发现它背后到底是怎么回事 cmake_minimum_required (VERSION 2.6) project(Tutorial) add_executable(Tutorial tutorial.cpp) 和这样一个小的tutorial.cpp int main() { return 0; } 有这么多的文件生成 CMakeCache.txt cmake_install.cmake Makefile CMakeLists.txt tutorial.cpp 和一个包含如此多文件和文件夹的CMakeFiles文件夹 CMakeCCompiler.cmake CMakeOutput.log Makefile.cmake cmake.check_cache CMakeSystem.cmake progress.marks CMakeCXXCompiler.cmake CMakeTmp TargetDirectories.txt CMakeDetermineCompilerABI_C.bin CompilerIdC Tutorial.dir CMakeDetermineCompilerABI_CXX.bin CompilerIdCXX CMakeDirectoryInformation.cmake Makefile2 不了解幕后发生的事情(即:为什么可能生成文件以及目的是什么)是能够学习CMake的最大障碍。 如果有人知道,为了后人的缘故,请你解释一下吗? 这些文件的目的是什么,当我键入cmake . 在构build项目之前,cmake究竟是如何configuration和生成的?

如何构build和安装GLFW 3并将其用于Linux项目

GLFW3 昨天晚上,我正在努力尝试从源代码为Linux构buildGLFW 3软件包。 这个过程花了我很长时间,总共花了3个小时,部分原因是我不熟悉CMake,部分原因是我对GLFW不熟悉。 我希望这篇文章能够让你免于昨天的困难! 我想我应该做一个简短的报告,希望能为你节省几个小时的时间。 感谢#glfw IRC频道的“urraka”,“b6”和“niklas”,我得到了glfw 3.0.1版本的工作。 事实certificate,这不是一个微不足道的过程(当然不是对我来说,我不是专家),因为网上关于glfw3的文档并不多,特别是关于使用CMake进行设置。 我被要求把它分成一个问题和答案部分,所以我已经这样做了,答案部分现在在下面。 你是GLFW的维护者还是GLFW团队的成员? 如果有任何GLFW3的维护者看到这个,那么我给他们的消息是请在你的网站上添加一个“在Windows,Mac OS X和Linux上设置GLFW3”部分! 使用GLFW编写程序相当容易,因为在线文档相当不错,可以快速扫描所有可用的类和模块,然后就可以开始了。 这里的一个testing项目的例子也很好。 我发现的两个主要问题是,首先如何在我的系统上设置GLFW3,其次是如何构buildGLFW3项目? 对于非专家来说,这两件事情可能还不够清楚。 编辑 今天有一个简短的看看(date:2014-01-14),看起来GLFW网站自从我上次看了以后发生了很大的变化,现在有一个关于编写GLFW和GLFW的build筑程序的章节,我认为这是新的。