大约一年前,我询问了headerdependenciesinCMake.我最近意识到问题似乎是CMake认为这些头文件是项目的外部。至少,在生成Code::Blocks项目时,头文件不会出现在项目中(源文件会出现)。因此,在我看来,CMake认为这些header是项目的外部,并且不会在依赖项中跟踪它们。在CMake教程中的快速搜索只指向include_directories似乎没有做我希望的事情......向CMake发出信号表明特定目录包含要包含的header以及应由生成的Makefile跟踪这些header的正确方法是什么? 最佳答案
在尝试构建使用CMake的项目时,通常需要启用/禁用许多开关。您如何存储某些用户所做的build设置以使构建可在另一台机器上重现?是否有某种导出功能,或者您只是复制构建(缓存)文件夹? 最佳答案 有一个选项可以预加载脚本,以便使用cmake填充缓存文件cmake-Cinitial-cache是一个包含以下列方式设置的变量的文件,例如对于安装前缀:set(CMAKE_INSTALL_PREFIX"/my/install/prefix"CACHEPATH"")然后在使用cmake填充缓存时传递此文件。很简单,但我不知道,也没有找到好的s
我有三个文件:lib.clib.h=>它们应该被构建为.so文件client.c=>这应该被构建为可执行文件。在client.c中,我包含lib.h文件,以便获取lib.c下定义的函数的声明谁能告诉我我应该使用的确切CMakeLists文件,以便源区域不会被Cmake的临时文件和二进制文件和库(我相信是windows的情况下为.dll)在单独的构建和二进制目录中生成? 最佳答案 此解决方案不会创建.so文件,而是创建一个cmake等效文件,以便进一步包含在cmake中。我正在寻找一种解决方案,将提供与此等效的解决方案:g++-sha
美好的一天!让我们有一个源文件main.cpp和一个包含下一个文本的CMakeLists.txt文件:cmake_minimum_required(VERSION2.6)project(tmp)set(CMAKE_CXX_FLAGS"-Wall")add_executable(tmp.elfmain.cpp)假设main.cpp文件包含一个简单的“Hello,World!”程序:#includeintmain(){printf("Hello,World!\n");return0;}我们可以使用cmakeCMakeLists.txt&&make来构建项目。然后我们将获得可以运行的tmp.
共有三个文件,(m.c、m.h和**main.c*)。文件m.h//m.hintm();文件m.c//m.c#include#include"m.h"intm(){printf("Hello,m!\n");return0;}文件main.c//main.c#include"m.h"intmain(){returnm();}虽然我更喜欢共享库(m.dll),但我制作了CMakeLists.txt文件:PROJECT("app1")ADD_LIBRARY(mSHAREDm.c)ADD_EXECUTABLE(myexemain.c)TARGET_LINK_LIBRARIES(myexem)C
我试图了解CMake背后的目的。为什么它的设计就像现在一样。以下是一些我想回答的问题。为什么cmake会生成makefile而不仅仅是构建项目?为什么cmake文件是一系列命令而不仅仅是配置文件eg:ini/xml/yaml我写入CMakeLists.txt的命令应该做什么?我猜只是调用编译器太容易了我应该按什么顺序执行命令?所有内容都不区分大小写吗?可以全部小写吗?为什么教程建议我明确列出每个源文件?如何构建我的CMakeLists.txt以使其简短且易于维护。我在实际项目中查找的每个文件看起来都非常困惑。 最佳答案 可能很难理解
我正在尝试设置我的项目以使用CMake正确编译。我的目录如下所示:root|-bin||-//WhereIwanttobuildCMakefrom-using'cmake..'|-build||-|-include||-database|||-database.h|-src|-database||-database.cpp|-main|-main.cpp随着我的项目越来越大,我的子目录肯定会增长,并且认为CMake可能是学习的好主意。目前我只能让CMake在我的src/中没有子目录的情况下工作。但是,我确实希望这个项目能够发展成许多子目录。每个目录中是否需要多个CMakeLists.t
我目前在Windows上安装了cmake、clang和ninja。我正在尝试使用CMake生成一个ninja构建文件来编译一个非常简单的helloworld程序。我的CMakeLists.txt看起来像这样:cmake_minimum_required(VERSION2.8)project(test_project)add_executable(mainmain.cpp)main.cpp是一个简单的helloworld程序。在命令行我运行这个:cmake-GNinja..我得到以下错误:--TheCcompileridentificationisClang3.5.0clang.exe:
我一直在使用C++和CMake构建跨平台应用程序。不幸的是,许多库不包含CMake项目描述。例如Google支持的项目经常使用GYP.以下是我针对这个问题采取的一些方法:在网络上查找库的CMake项目描述使用CMake编写项目描述查找或编写库的CMakeLists.txt描述是一个维护问题。随着库的更新,我的CMake描述也必须更新。此外,图书馆作者创建的项目文件更可能是正确的。我应该如何将GYP项目具体集成到基于CMake的软件中?在CMake中复制项目描述是最好的方法,还是我缺少CMake的某些功能?在CMake中处理此类问题的一般方法有哪些?那些包含一组用于各种平台/IDE的项目
我可以在cmake中使用一个变量来使其表现得像通过了-q选项一样吗?这会很好,因为我有一个非常模块化的构建,它会使cmakes输出变得困惑。我在一个c++项目中使用它。 最佳答案 从cmake3.1开始,设置CMAKE_INSTALL_MESSAGE也非常有用。例如,set(CMAKE_INSTALL_MESSAGELAZY)将跳过--Up-to-date:消息。 关于build-告诉cmake保持安静,我们在StackOverflow上找到一个类似的问题: