Questions tagged «cmake»

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

4
如果仍然需要指定CMAKE_MODULE_PATH,find_package()有什么用?
我正在尝试使用CMake来构建跨平台的构建系统。现在,该软件具有一些依赖性。我自己编译了它们并将它们安装在我的系统上。 已安装的一些示例文件: -- Installing: /usr/local/share/SomeLib/SomeDir/somefile -- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile -- Installing: /usr/local/lib/SomeLib/somesharedlibrary -- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake -- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake 现在,CMake有了一个find_package()可以打开Find*.cmake文件并在系统上的库之后进行搜索并定义一些变量(如SomeLib_FOUNDetc)的功能。 我的CMakeLists.txt包含以下内容: set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}") find_package(SomeLib REQUIRED) 第一个命令定义了CMake在哪里搜索,Find*.cmake然后我添加SomeLib了FindSomeLib.cmake可以找到的目录,因此find_package()可以正常工作。 但这find_package()有点奇怪,因为存在的原因之一就是要摆脱非跨平台的硬编码路径。 通常如何做?我应该将cmake/目录复制SomeLib到我的项目中并设置CMAKE_MODULE_PATH相对目录吗?
167 cmake 

4
使用CMake自动将文件夹中的所有文件添加到目标吗?
我正在考虑将跨平台项目从Visual C ++,XCode和makefile中的单独生成管理系统切换到CMake。 我需要的一项基本功能是将目录中的所有文件自动添加到目标。尽管使用make可以轻松做到这一点,但使用Visual C ++和XCode却不容易做到(如果我做错了,请纠正我)。是否可以直接在CMake中进行?怎么样?


3
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 .,在构建项目之前,cmake配置和生成的确切内容是什么?
157 cmake 

4
在CMake中,如何测试编译器是否为Clang?
我们有一组跨平台的CMake构建脚本,并且支持使用Visual C ++和GCC进行构建。 我们正在尝试Clang,但我不知道如何使用CMake脚本测试编译器是否为Clang。 我应该测试什么以查看编译器是否为Clang?我们目前正在使用,MSVC并CMAKE_COMPILER_IS_GNU<LANG>分别测试Visual C ++和GCC。
151 c++  c  cmake  clang 



4
如何使用cmake创建共享库?
我已经编写了一个库,该库过去是使用自写的Makefile进行编译的,但是现在我想切换到cmake。树看起来像这样(我删除了所有不相关的文件): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp 因此,我想做的就是将源代码编译到共享库中,然后将其与头文件一起安装。 我发现的大多数示例都使用一些共享库来编译可执行文件,而不仅仅是一个普通的共享库。如果有人可以告诉我一个使用cmake的非常简单的库,这也将很有帮助,因此我可以以此为例。

2
CMake:带有单元测试的项目结构
我正在尝试构建项目以包括生产源(在src子文件夹中)和测试(在test子文件夹中)。我正在使用CMake构建它。作为最小的示例,我具有以下文件: CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (TEST) add_subdirectory (src) add_subdirectory (test) src / CMakeLists.txt: add_executable (demo main.cpp sqr.cpp) src / sqr.h #ifndef SQR_H #define SQR_H double sqr(double); #endif // SQR_H src / sqr.cpp #include "sqr.h" double sqr(double x) { return x*x; } src / main.cpp-使用sqr,并不重要 测试/CMakeLists.txt: find_package(Boost COMPONENTS system filesystem …

1
导致CMAKE产生错误
如何在特定条件下使CMAKE生成错误。也就是说,我想要这样的东西: if( SOME_COND ) error( "You can't do that" ) endif()
136 cmake 



4
CMake链接到外部库
如何使CMake将可执行文件链接到不在同一CMake项目中构建的外部共享库? 只是做target_link_libraries(GLBall ${CMAKE_BINARY_DIR}/res/mylib.so)给错误 make[2]: *** No rule to make target `res/mylib.so', needed by `GLBall'. Stop. make[1]: *** [CMakeFiles/GLBall.dir/all] Error 2 make: *** [all] Error 2 (GLBall is the executable) 在我将库复制到二进制目录后bin/res。 我尝试使用 find_library(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res) 失败了RESULT-NOTFOUND。
126 cmake 

10
如何开始使用GTest和CMake
最近,我因使用CMake编译我的C ++项目而受宠若惊,现在想开始为我的代码编写一些单元测试。我已决定使用Google Test实用程序来解决此问题,但在入门方面需要一些帮助。 我整天都在阅读各种指南和示例,包括Primer,IBM的介绍和有关SO的一些问题(此处和此处)以及其他我所追踪的资源。我知道那里有很多东西,但是不知何故我仍然遇到困难。 我目前正在尝试实施最基本的测试,以确认我已经正确编译/安装了gtest,并且该测试无法正常工作。唯一的源文件(testgtest.cpp)几乎完全来自此先前的答案: #include <iostream> #include "gtest/gtest.h" TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } 我关联的CMakeLists.txt如下: cmake_minimum_required(VERSION 2.6) project(basic_test) # Setup testing enable_testing() find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIR}) # Add test cpp file add_executable(runUnitTests testgtest.cpp ) # Link test executable against gtest & gtest_main target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG}) add_test( NAME runUnitTests COMMAND runUnitTests …


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.