草庐IT

language-cmake

全部标签

build - 递归 CMake 搜索头文件和源文件

我是CMake的新手,想问是否有人可以帮助解决以下问题。我在它们各自的文件夹中有C++源文件和头文件,现在,我想创建一个CMake文本文件,以递归方式搜索它们。目前,我是这样做的:CMAKE_MINIMUM_REQUIRED(VERSION2.8)PROJECT(CarDetectorDAISY)file(GLOB_RECURSESRCS*.cpp)file(GLOB_RECURSEHDRS*.h)ADD_EXECUTABLE(stereo_framework${SRCS}${HDRS})TARGET_LINK_LIBRARIES(stereo_framework)这将创建我的CarD

c++ - 当 CMake 中的生成器或输入发生更改时,如何仅构建自动生成的代码?

我正在开发一个源代码存储库,该存储库通过运行python脚本输出header和实现来生成一些C++代码。此代码随后被编译并链接到我的库和可执行文件。我知道只有当两个条件之一为真时,生成的代码才会改变:生成器代码本身发生变化生成器的输入(XML文件)发生变化我想使用cmake来管理构建过程。目前,我正在使用execute_process来启动生成器。但是,每次我运行cmake时都会运行它并且它会触及文件,导致我生成的代码被重新编译并增加了我的总编译时间。我还想确保生成的代码始终在我的库之前运行。换句话说,我希望库依赖于生成器来运行。在cmake中处理这种情况的正确方法是什么?我已经看到了

macos - OS X : MACOSX_RPATH is not specified for the following targets 下的 CMake 警告

我尝试在OSX(Yosemite)下构建一个基于CMake的软件,它可以在Fedora21下成功构建。它使用了一堆库。两者都有,像Boost这样的大型开放式程序和一些位于/installation_folder/lib中的自行编写的程序。我使用CMake版本3.3.0。执行后mkdirbuildcdbuildcmake..-DCMAKE_C_COMPILER=/usr/local/Cellar/gcc/5.2.0/bin/gcc-5-DCMAKE_CXX_COMPILER=/usr/local/Cellar/gcc/5.2.0/bin/g++-5-DCMAKE_MODULE_PATH=

c++ - CMake ExternalProject_Add() 和 FindPackage()

是否有正确的方法来查找使用ExternalProject_Add()构建的库(通过FindPackage())?问题是CMake在CMake时找不到库,因为外部库是在编译时构建的。我知道在super构建中构建库和项目时可以结合这两个CMake函数,但我想在普通CMake项目中使用它。事实上,我想用ExternalProject_Add构建VTK6,并在我的CMake项目中使用FindPackage找到它。 最佳答案 有办法做到这一点。但这有点骇人听闻。您基本上添加了一个自定义目标,在构建期间重新运行cmake。您必须在一个小型测试项

c++ - 如何告诉 CMake 在 Windows 上使用 Clang?

我有一个使用CMake构建的C++项目。我通常在OSX上构建,但现在我正在尝试让Windows版本也能正常工作。出于兼容性原因,我想在Windows上使用Clang。我从LLVM安装了预编译的Clang3.8二进制文件:C:\ProgramFiles\LLVM\bin\clang.exeC:\ProgramFiles\LLVM\bin\clang++.exe它也安装在我的PATH上:>clang++clang++.exe:error:noinputfiles我有两个问题:当我调用cmake--build时,如何告诉CMake使用clang++?在构建CMake配置的编译器之前如何检查?

build - 如何使用 CMake 收集源文件而不使用 globbing?

CMakedocumentation明确声明file(GLOB...)不是建议为构建收集源文件,但它没有提及推荐的方法实际上是什么。手动指定每个源文件听起来有点过于手动大部头书。那么,收集源文件的正确方法是什么,如果不是文件(GLOB...)? 最佳答案 手动确实是推荐的方法。通过建议不要使用GLOB,该文档只是对依赖于现有文件的构建系统发出警告。例如,您想添加一个测试可执行文件,因此您创建了mytest.cpp。哎呀。现在你的库编译中断了。AUX_SOURCE_DIRECTORY的文档(类似于源文件的通配符)给出了以下警告:Iti

gcc - 在 cmake 中检查 gcc 次要

是否可以在cmake中查看GCC的次要版本号?我想做这样的事情:If(GCC_MAJOR>=4&&GCC_MINOR>=3) 最佳答案 使用onqtam提到的if(CMAKE_CXX_COMPILER_VERSIONVERSION_GREATER4.2)。这个过时的答案是从2.6CMake时代回来的。你可以运行gcc-dumpversion并解析输出。这是一种方法:if(CMAKE_COMPILER_IS_GNUCC)execute_process(COMMAND${CMAKE_C_COMPILER}-dumpversionOUTP

c++ - 如何在 CMake 中正确创建目标之间的依赖关系?

我正在尝试使用CMake在C++项目与其使用的库之间建立一些简单的依赖关系。设置如下项目依赖项目本身包含源文件,其中包含来自Dependency的header,并且在构建可执行文件时,它需要与Dependency的静态库链接。到目前为止,我可以让它工作,但我必须在CMakeLists.txt文件中为Project指定Dependency的包含目录>手动。我希望自动将其拉出,并且我已经探索了使用find_package()命令的选项,这样做的成功有限,并使事情变得更加复杂。我要做的就是在Project之前构建Dependency并让Project链接到库并拥有其包含目录。有没有一种简单简

gcc - 如何在编译期间强制 cmake 包含 "-pthread"选项?

我知道有类似find_package(Threads)的东西,但它似乎没有什么不同(至少就其本身而言)。现在我正在使用SET(CMAKE_C_FLAGS${CMAKE_C_FLAGS}"-pthread"),但它对我来说似乎不是一个正确的解决方案。 最佳答案 CMake最新版本(>=3.1)中的Threads模块生成Threads::Threads导入目标。将目标链接到Threads::Threads会添加所有必要的编译和链接标志。可以这样做:set(CMAKE_THREAD_PREFER_PTHREADTRUE)set(THREA

c++ - 如何让cmake找到CUDA

我正在尝试构建thisproject,它具有CUDA作为依赖项。但是cmake脚本在系统上找不到CUDA安装:cls~/workspace/gpucluster/cluster/build$cmake..--TheCcompileridentificationisGNU4.7.1--TheCXXcompileridentificationisGNU4.7.1--CheckforworkingCcompiler:/usr/bin/gcc--CheckforworkingCcompiler:/usr/bin/gcc--works--DetectingCcompilerABIinfo--De