草庐IT

language-cmake

全部标签

c++ - 如何使用 cmake 创建共享库?

我写了一个库,以前用自写的Makefile编译,但现在我想切换到cmake。树看起来像这样(我删除了所有不相关的文件):.├──include│  ├──animation.h│  ├──buffers.h│  ├──...│  ├──vertex.h│  └──world.h└──src├──animation.cpp├──buffers.cpp├──...├──vertex.cpp└──world.cpp所以我要做的只是将源代码编译成共享库,然后将其与头文件一起安装。我发现的大多数示例都使用一些共享库编译可执行文件,但绝不只是简单的共享库。如果有人能告诉我一个使用cmake的非常简

C++ 项目组织(使用 gtest、cmake 和 doxygen)

我一般是编程新手,所以我决定从用C++制作一个简单的vector类开始。不过,我想从一开始就养成良好的习惯,而不是以后尝试修改我的工作流程。我目前只有两个文件vector3.hpp和vector3.cpp。随着我对一切变得更加熟悉,这个项目将慢慢开始增长(使其更像是一个通用线性代数库),所以我想采用“标准”项目布局,让以后的生活更轻松。所以环顾四周后,我发现了两种组织hpp和cpp文件的方法,第一种是:project└──src├──vector3.hpp└──vector3.cpp第二个是:project├──inc│└──project│└──vector3.hpp└──src└─

c++ - CMake:带有单元测试的项目结构

我正在尝试构建我的项目以包含生产源(在src子文件夹中)和测试(在test子文件夹中)。我正在使用CMake来构建它。作为一个最小的例子,我有以下文件:CMakeLists.txt:cmake_minimum_required(VERSION2.8)project(TEST)add_subdirectory(src)add_subdirectory(test)src/CMakeLists.txt:add_executable(demomain.cppsqr.cpp)src/sqr.h#ifndefSQR_H#defineSQR_Hdoublesqr(double);#endif//SQ

c++ - 在 CMake 中,如何测试编译器是否为 Clang?

我们有一组cross-platformCMakebuildscripts,并且我们支持使用VisualC++进行构建和GCC.我们正在试用Clang,但我不知道如何使用我们的CMake脚本测试编译器是否为Clang。我应该测试一下编译器是否是Clang?我们目前正在使用MSVC和CMAKE_COMPILER_IS_GNU分别测试VisualC++和GCC。 最佳答案 可靠的检查是使用CMAKE__COMPILER_ID变量。例如,检查C++编译器:if(CMAKE_CXX_COMPILER_IDSTREQUAL"Clang")#us

c++ - 如何使用 CMake 正确添加包含目录

大约一年前,我询问了headerdependenciesinCMake.我最近意识到问题似乎是CMake认为这些头文件是项目的外部。至少,在生成Code::Blocks项目时,头文件不会出现在项目中(源文件会出现)。因此,在我看来,CMake认为这些header是项目的外部,并且不会在依赖项中跟踪它们。在CMake教程中的快速搜索只指向include_directories似乎没有做我希望的事情......向CMake发出信号表明特定目录包含要包含的header以及应由生成的Makefile跟踪这些header的正确方法是什么? 最佳答案

build - 如何存储 CMake build设置

在尝试构建使用CMake的项目时,通常需要启用/禁用许多开关。您如何存储某些用户所做的build设置以使构建可在另一台机器上重现?是否有某种导出功能,或者您只是复制构建(缓存)文件夹? 最佳答案 有一个选项可以预加载脚本,以便使用cmake填充缓存文件cmake-Cinitial-cache是一个包含以下列方式设置的变量的文件,例如对于安装前缀:set(CMAKE_INSTALL_PREFIX"/my/install/prefix"CACHEPATH"")然后在使用cmake填充缓存时传递此文件。很简单,但我不知道,也没有找到好的s

build - cmake 创建一个共享对象

我有三个文件:lib.clib.h=>它们应该被构建为.so文件client.c=>这应该被构建为可执行文件。在client.c中,我包含lib.h文件,以便获取lib.c下定义的函数的声明谁能告诉我我应该使用的确切CMakeLists文件,以便源区域不会被Cmake的临时文件和二进制文件和库(我相信是windows的情况下为.dll)在单独的构建和二进制目录中生成? 最佳答案 此解决方案不会创建.so文件,而是创建一个cmake等效文件,以便进一步包含在cmake中。我正在寻找一种解决方案,将提供与此等效的解决方案:g++-sha

visual-studio - 使用 cmake 和命令行构建 MSVC 项目

美好的一天!让我们有一个源文件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.

windows - Windows 上的 CMake 链接共享库

共有三个文件,(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

build - 了解 CMake 背后的目的

我试图了解CMake背后的目的。为什么它的设计就像现在一样。以下是一些我想回答的问题。为什么cmake会生成makefile而不仅仅是构建项目?为什么cmake文件是一系列命令而不仅仅是配置文件eg:ini/xml/yaml我写入CMakeLists.txt的命令应该做什么?我猜只是调用编译器太容易了我应该按什么顺序执行命令?所有内容都不区分大小写吗?可以全部小写吗?为什么教程建议我明确列出每个源文件?如何构建我的CMakeLists.txt以使其简短且易于维护。我在实际项目中查找的每个文件看起来都非常困惑。 最佳答案 可能很难理解