草庐IT

cmake-custom-command

全部标签

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

c++ - 如何设置 CMake 以生成仅 header 项目?

我想设置只有header的C++(或C)库项目,但找不到干净的方法。经过一些搜索,我发现您无法使用add_library设置普通库来执行此操作,因为它需要可编译的源文件。一种方法是使用add_custom_target代替,这样:#Getallheaders(usingsearchinsteadofexplicitfilenamesfortheexample)file(GLOB_RECURSEXSD_HEADERS*.hxx)add_custom_target(libsxsdSOURCES${XSD_HEADERS})但这似乎并不完全在这里工作,因为我看不到在VS2010中生成的项目中

makefile - 为什么我被警告项目没有使用 "CMAKE_TOOLCHAIN_FILE"变量?

当我构建一些第三方代码时,我看到来自CMake的以下警告:CMakeWarning:Manually-specifiedvariableswerenotusedbytheproject:CMAKE_TOOLCHAIN_FILE是什么导致了这个警告?我检查了配置文件,但找不到定义此变量的任何地方。我应该担心这个警告吗?如何修复它以使警告消失? 最佳答案 这是CMake在您为其提供未使用的命令行选项时生成的标准警告。例如,当CMakeLists.txt文件实际上不使用FOO变量时,将-DFOO=bar传递给cmake。现在,这是一种特殊

visual-studio - 如何使用 CMake 和 Visual Studio 设置路径环境变量来运行测试

我正在使用CMake生成VisualStudio项目文件。我想在设置PATH环境变量后运行测试可执行文件,以便它能够加载所需的dll。我按照http://www.mail-archive.com/cmake@cmake.org/msg21493.html的讨论进行了尝试但它不起作用。您是否将CMake与VisualStudio一起用于此目的?请分享您的经验。此外,我找不到调试CMake脚本的简单方法,例如查看它分配给PATH变量的值。使用CMAKE_VERBOSE_MAKEFILE设置CMake详细没有帮助。我将如何自己调试它? 最佳答案