CMake提供了几种指定目标源文件的方法.一种是使用globbing(文档),例如:
FILE(GLOB MY_SRCS dir/*)
Run Code Online (Sandbox Code Playgroud)
另一个是单独指定每个文件.
哪种方式更喜欢?Globbing似乎很容易,但我听说它有一些缺点.
我问这个是下次我使用CMake的时候提醒自己的.它永远不会坚持,谷歌的结果也不是很好.
在CMake中设置和使用变量的语法是什么?
我不是只问自己这个问题.我希望这个问题可以作为许多喜欢我的新手的参考,发现它对于这样一个小CMakeLists.txt文件 后幕后到底发生了什么感到非常困惑.
cmake_minimum_required (VERSION 2.6)
project(Tutorial)
add_executable(Tutorial tutorial.cpp)
Run Code Online (Sandbox Code Playgroud)
这么小 tutorial.cpp
int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)
生成的文件太多了
CMakeCache.txt cmake_install.cmake Makefile
CMakeLists.txt tutorial.cpp
Run Code Online (Sandbox Code Playgroud)
和一个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
Run Code Online (Sandbox Code Playgroud)
不了解幕后发生的事情(即:为什么文件必须生成以及它们的目的是什么),是能够学习CMake的最大障碍.
如果有人知道,你可以为了后代而解释它吗?这些文件的目的是什么,当我输入时cmake .,在构建项目之前cmake配置和生成究竟是什么?
正如标题所说,我似乎无法使用OpenGL和Glut构建项目.
我得到OpenGL函数的Undefined引用错误.
我试过做:
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
有什么建议?
我做了很多项目和很多不同的构建系统和CI工具.最近,我接触到了一个偶然的挑战性任务,即为一个合理大小的C++应用程序添加基于autotools的环境.虽然我喜欢最终用户的易用性,但我并不喜欢处理m4和开发人员方面的所有auto*工具.
我在业余时间做了一个相当大的辅助项目,并且决定我想把CMake用于试驾.由于我刚刚开始,我显然正在计划挖掘文档,常见问题解答,维基等,并边做边学.顺便说一下,我为"Mastering CMake"这本书付钱,但我在亚马逊上发现的评论足以让我觉得它可能不值钱.所有这一切,在任何新的东西中都经常会出现"陷阱",新人经常会偶然发现旧的专业人士早已学会避免.我想知道那些基于人们对CMake的经验是什么,我希望通过在这里询问来减少我的学习痛苦.
我应该指出,我计划主要在Linux上构建,以及其他UN*X变体.Windows并不是我的POV真正关心的问题.这是一个大型服务器端应用程序,具有用于操作员的Web和CLI界面,用于自动化/与OSS工具集成的北向REST接口,以及用于CPE的SOAP南向接口.我将需要很多第三方库和应用程序来实现这一切,除非我想在未来10年内手动构建这一切.:)
1. cmake是来自CMake软件的命令:为构建自动化系统做准备; make和make install是来自Make software:build automation system的命令.
2.从阅读这个帖子,我的理解是:
一个.这个"cmake和make"的东西实际上在其实现中使用g ++/gcc.cmake和make stuffs基本上只是使用g ++/gcc的工具.那是对的吗?
湾 gcc/g ++是执行实际工作的编译器.
C.所以我可以直接使用gcc/g ++而不使用make和CMake的东西?
3. 根据此stackoverflow 答案:CMake获取CMakeList.txt文件,并将其输出为特定于平台的构建格式,例如Makefile,Visual Studio等.
但是当我遇到这个 openCV安装时:
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
Run Code Online (Sandbox Code Playgroud)
它在没有CMakeLists.txt文件的目录中执行cmake命令.你能解释一下这个吗?
4,我已经看到通常的步骤是:cmake,make,sudo make install.我读了这篇stackoverflow 文章,我明白了:
(i) make用于建设项目.
(ii) make install将二进制/可执行文件复制到已安装的目录.
一个.那么当我们make,结果/二进制文件/可执行文件存储在哪里?
湾 如果我们只运行make没有make install,是否意味着没有生成文件?
C.我遇到了这个openCV 教程,关于使用openCV和GCC以及CMake.它用:
cd <DisplayImage_directory>
cmake . …Run Code Online (Sandbox Code Playgroud) 我的项目目录在其根目录中包含一个CMakeLists.txt文件src和include目录.src也包含它自己的CMakeLists.txt,由根目录链接.有没有一种方法可以指定CMake设置默认的全局构建目录,以便语法src/CMakeLists.txt接近以下内容?
include_directories(include)
add_executable(first main.cpp foo.cpp)
add_executable(second bar.cpp)
Run Code Online (Sandbox Code Playgroud)
我想要构建这个目录树:
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
foo.cpp
bar.cpp
include/
...
bin/ (or build/)
first
second
Run Code Online (Sandbox Code Playgroud)