CMake:如何添加仅针对一种配置执行的自定义命令?

我想添加一个cmake自定义命令,该命令仅在使用Visual Studio multi-config generator时在调试配置中生成自定义目标时执行。有没有干净的方法可以做到这一点 为了实现这一点,我首先尝试将整个命令列表包装到生成器表达式中,如下所示。 add_custom_命令( ... 命令$ ) 但是在执行命令时,这给了我一个语法错误。经过一些尝试和错误,我得到了下面的黑客解决方案的工作。这将命令列表中的每个单词包装在生成器表达式中,如下所示 add_custom_comman

CMake中的二进制文件放在哪里?

在我的项目中,所有源代码都驻留在名为“src”的文件夹中。在我的项目根目录中(在“src”上方)有一个CMakeLists.txt文件,但它仅声明项目,并包含“src”子目录。src下的CMakeLists.txt文件完成了所有工作,包括“添加二进制文件” (这是一种常见的方法,还是我应该将所有的智能都放在根级别的CMakeLists.txt文件中?) 如果我现在构建项目,我的二进制文件会被放在src文件夹中,但这没有多大意义,我宁愿将其放在根文件夹或专用的“bin”文件夹中 如何执行此操作?如

CMake add_子目录并重新编译

我刚刚将一个有点大的项目从VisualStudioSolutions迁移到CMake,我注意到了一个奇怪的行为。我有如下结构: project/CMakeLists.txt project/code/CMakeLists.txt project/code/library-1/CMakeLists.txt project/code/library-1/*.hpp project/code/library-1/*.cpp project/code/library-2/CMakeLists.txt

Cmake 包括柠檬图书馆

我只想将Lemon库添加到我的CMakeLists.txt中。当我不使用CMake时,我只是添加了“-lemon”,一切都很顺利,但现在我不知道将其添加到CMake文件的过程 已编辑的不包括myCMakeLists.txt: # Created by the script cgal_create_cmake_script_with_options # This is the CMake script for compiling a set of CGAL applications. proje

CMake:子目录中的文件全局绑定

我想在CMake中的google mock和google测试框架中添加一个安装指令(即:我想让让install做正确的事情),因为我需要交叉编译它们 因为这是一个外部库,所以我希望保持更改不是反向的。 是否有可能让CMake File Globbing在不使用glob_RECURSE的情况下工作到glob a子目录 我在使用gtest时遇到的问题是,如果我递归地全局化,include/gtest/interal就会被我定义的函数压扁。因此,目录中的文件include/gtest/internal

CMake交叉编译ARMV5的自定义项目 我正在为我的CKED C++项目中的一个交叉编译问题而努力。

我的项目使用了许多外部库。我已经成功地在目标环境中构建和安装了许多库(即sshfs mounte:每次构建库时,我都会立即将其安装到目标环境中),比如Boost、Glog、Protobuf、Gtest等等 当涉及到构建我自己的项目时,问题就出现了,它似乎与变量CMAKE\u FIND\u ROOT\u PATH的使用有关 事实上,我构建和安装的一些依赖项在$TARGET\u FS/usr/lib中,还有一些在$TARGET\u FS/usr/local/lib中。我似乎无法让cmake通过使用前

CMake:从对象文件(.o)生成共享对象文件(.so)时满足依赖关系

我可以在不使用CMake的情况下使用手写Makefile执行此操作,如下所示: g++ $(CXSCINC) -c -fPIC cellComplex_extern.cpp -o cellComplex_extern.o g++ $(CXSCINC) -shared -Wl -o cellComplex_lib.so cellComplex_extern.o $(CXSCLIB) -lcxsc 这使我获得了共享库cellComplex_lib.so,然后由ctypes将其作为动态链接库

从cmake sourcefile列表中排除文件结构中某处的目录

在我的项目的任何子目录中,都可以在任何地方创建一个名为“hide”的目录,并在其中放置一些代码文件(.c、.cpp、.h…)。CMake应忽略这些文件。我怎样才能做到这一点? 有没有简单方法的建议?搜索了网络,但找不到解决方案 我尝试的是: 文件和全局 如果目录路径已知(如“cmakfiles”目录)或文件已知(如“main.c”文件),则2rd行可以正常工作。但是,如果一个字符串有两个“*”则不起作用。对于位于某处的目录,我找不到简单的解决方案 正则表达式 然后我试着用正则表达式 file(G

如何让CMake找到真正的静态库而不是动态包装器?

我使用find_包将外部库包含到我的CMake项目中。因为我想添加对静态链接的支持,所以我将setBUILD_SHARED_LIBS设置为FALSE。然而,我仍然可以得到像libglew32.dll.a这样的库,它们只是使动态链接更容易的包装器。相反,我希望CMake查找同一目录中存在的libglew32.a。这是我使用的方法。在linux上执行此操作将使用所有静态库 set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES

使用CMake进行SFML编译。sh.exe不在我的路径中

我试图用CMake生成文件来编译SFML,但我不理解这个错误 在您的路径中找到了sh.exe,如下所示: C:/Windows/system/sh.exe 要使MinGW make正常工作,sh.exe必须不在您的路径中 我一定是瞎了,因为我在路上的任何地方都看不到它。虽然我对自己没有把握,你能告诉我,如果你看到什么我应该删除吗 C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Dell\DW WLAN卡;C:\ProgramFiles(x

安装caffe cmake错误

我已经按照所有步骤安装了caffe依赖项。我遇到了以下错误: find: `dependencies/cmake-3.3.0-rc2/Tests/FindPackageTest/Baz': No such file or directory find: `1.1': No such file or directory find: `dependencies/cmake-3.3.0-rc2/Tests/FindPackageTest/Baz': No such file or directory

Cmake 如何在Cocos2d-x项目中更新子项目

我刚刚开始使用Cocos2d-xv3.8.1,我遇到了如何更新子项目的问题 cocos new SampleProject -p com.domain.sampleproject -l cpp -d . 对于上述命令cocos: 创建两个示例类:AppDelegate和HelloWorldScene 创建子项目:proj.android,proj.android studio, proj.linux,proj.win32,proj.ios\u mac,proj.win10,proj.win8

Cmake 如何让CLion运行安装目标

我正在一个已经在使用CMake的现有项目上评估CLion 1.2.1。该项目由几个库模块和一个可执行文件组成 我有一个安装目标,用于在bin文件夹中收集可执行文件和配置文件以进行调试: ... install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_BINARY_DIR}/bin/) install(FILES config.xml DESTINATION ${CMAKE_BINARY_DIR}/bin/) 在命令行上构建时,我只需运行: mak

Cmake nusmv 2.6构建失败

我下载了nusmv-2.6.0.tar.gz,并按照nusmv-2.6.0/nusmv/readme.TXT中的自述文件来构建它,但存在一些问题。我想可能有一个错误的配置,但我没有找到它 tar -jxvf nusmv-2.6.0.tar.gz cd nusmv-2.6.0/nusmv mkdir build cmake .. 错误信息 ~/workspace/NuSMV-2.6.0/NuSMV/build$ cmake .. writing CuDD config file writing

列表(删除_项)不在cmake中工作

以下是我的CMakeLists.txt文件的一部分 file(GLOB SOURCES "xyz/*.cpp") message("${SOURCES}") list(REMOVE_ITEM SOURCES "src1.cpp") message("${SOURCES}") 在文件“xyz/*.cpp”中有一个相对路径。 ${SOURCES}的内容在删除项目前后相同 为什么列表(删除项目)在我的情况下不起作用?任何帮助都是无价的。我为你的问题找到了解决办法。我的解决方案背后的想法是,获取特殊c

将源添加到cmake中的列表变量与直接添加到add_可执行文件中的列表变量相比

为什么建议首先将源添加到列表中,而不是直接添加到可执行文件中 PROJECT( helloworld ) SET( hello_SRCS hello.cpp ) ADD_EXECUTABLE( hello ${hello_SRCS} ) 为什么不干脆跳过SET行呢?我经常看到这种做法,也认为这是一种很好的做法。例如,如果您使用CLion IDE(它实际上使用CMakeLists.txt作为其项目结构文件),您将看到,当您创建一个新项目时,默认情况下它会创建一个SOURCE_FILES变量 我能

Cmake 如何在externalproject\u add中设置命令参数

我想创建一个cmake脚本,在我的项目中自动构建zlib 我补充说 externalproject_add(zlib PREFIX . # download step GIT_REPOSITORY git@github.com:madler/zlib.git GIT_TAG v1.2.8 # configure step SOURCE_DIR zlib CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/conf

如何让cmake在第三方标头mpi.h中查找类型的大小?

我正在从事一个涉及高性能计算和MPI库的自由软件项目 在我的代码中,我需要知道在MPI.h中定义的MPI_偏移类型的大小 通常,此类项目将使用autotools构建,并且此问题将很容易解决。但由于我的过失,我正在使用CMake构建,我找不到任何方法来完成这个简单的任务。但必须有一种方法可以做到这一点——这通常是在autotools项目上完成的,所以我认为在CMake中也是可能的 当我使用: check_type_size("MPI_Offset" SIZEOF_MPI_OFFSET) 它失败了

如何获得CMake';s C/C++;当变量为';t集?

CMake可以使用CMake\u C\u编译器/CMake\u CXX\u编译器, 但是,在较新版本的CMake中,不要在CMakeCache.txt中设置这些变量 在未设置变量的情况下,是否有方法访问CMake将用于调用项目编译器的C/C++命令 这里我指的是CMake调用编译器所使用的C/C++路径 问因为我写了一个扫描make-dry-run输出的工具,它需要知道编译源文件时使用的编译器命令。有很多方法(1)(2),你甚至可以考虑不扫描,而是直接输出你需要的任何东西,例如文件(3) 将变

Cmake 交叉编译azure iot sdk

我尝试为BeagleBoard Black交叉编译Azure IoT C SDK() 我确实安装了一台Debian GNU/Linux 8.7(jessie)机器,并安装了工具链,如下所述: 然后我按照这里的步骤: 并创建了一个工具链文件: INCLUDE(CMakeForceCompiler) SET(CMAKE_SYSTEM_NAME Linux) # this one is important SET(CMAKE_SYSTEM_VERSION 1) # this one

Cmake 在没有根访问权限的情况下安装qlfw3

我正在做一个需要glfw3软件包的项目。我已尝试安装glfw3,它需要访问/usr/local/include。但由于我没有根访问权限,所以创建目录GLFW的权限被拒绝。我怎样才能避开这个问题呢?你没有。这是一个cmake默认值。如果您想要一个好的交互式配置,请转到源代码树的顶层并键入ccmake。在这里,您可以很容易地找到覆盖INSTALL_前缀的选项。如果你点击“t”,你会得到更多的高级选项。完成后,“g”将生成makefile并退出。我在$HOME/local中为我的项目安装了许多本地库。

如何在bitbake中使用CMake的CPack

如何覆盖bitbakes常规内部打包功能(do_package)并使用CPack?因此,正常的CMake构建如下所示: cmake ../src cmake --build ../src cmake --build ../src --target install 因此,假设我在CMakeLists.txt中使用install命令并正确构造食谱,bitbake就能正确处理所有这些问题。因此,在此基础上,我想使用CMake的deb包生成器来构建我的包。通常情况下,在CMake构建中,在上述步骤之后

Cmake 为不同的生成宿主使用工具链文件

我想在受控构建环境中采用CMake进行构建,但无法在这些系统上安装CMake。我已经看过详细介绍如何使用工具链文件进行交叉编译的参考资料 是否可以使用此技术在一个系统上运行CMake,以生成要在其他生成主机上使用的生成文件?是否有详细说明任何陷阱的可用资源?我将在Linux上为从Arm Linux到z/OS的许多平台生成makefiles。将我的评论转化为答案 CMake的交叉编译意味着必须在运行CMake的PC/OS上安装交叉编译器才能生成环境 因此,不能为其他PC/OS环境生成例如makef

CMake:显示所有修改的变量

我希望有一个命令或选项来列出当前构建配置的所有修改的缓存变量。虽然cmake-L[AH]很好,但它也非常强大,没有显示哪些是非默认值 似乎有一个变量属性听起来与我正在寻找的完全一样,但文档并不十分令人放心: 内部管理财产不设置或获取。 这是由CMake管理的内部缓存条目属性,用于跟踪用户对条目的交互修改忽略它 这个问题也无济于事:有很多方法可以更改或初始化CMake中的变量(命令行、环境变量、脚本文件等),您无法涵盖所有这些 我刚刚提出了下面的脚本,它涵盖了命令行开关。将以下文件放入CMake项

如何使cmake在centos 6终端中识别正确的版本?

经过一个漫长的过程,试图让Emscripten继续。我一直在尝试建立fastcomp 克马克-DCMAKE\u BUILD\u TYPE=发布 -DLLVM_目标_TO_BUILD=“X86;JSBackend”-DLLVM_INCLUDE_示例=关闭-DLLVM_INCLUDE_测试=关闭-DCLANG_INCLUDE_测试=关闭 它给出了以下错误: CMake/modules/CheckCompilerVersion处的CMake错误。CMake:12(消息): 主机GCC版本必须至少为4.

Cmake 使用变量作为函数的参数列表

我想把一个变量的值传递给一个函数,就像我直接编写它一样。以下是我尝试过的: cmake_minimum_required (VERSION 3.5.1) project(test) message(WARNING "This is a warning") # CMake Warning at CMakeLists.txt:4 (message): # This is a warning set(variable "WARNING \"This is a warning\"") messa

CMakeLists.txt能否依赖于函数解析的文件?

我是CMake的新手,第一次从一个由许多子项目组成的大型项目开始 出于特殊原因(出于好奇,请参见下文),我已经有了一组包含每个CMake目标(lib或exe)所需源文件信息的include文件,现在,我更喜欢(重新)使用这些文件(原因也请参见下文) 编写一个函数来解析这些文件,并将其内容作为源文件添加到目标中,这是一项非常简单的任务 但是——现在的问题是: 显然,我想让每个目标CMakeLists.txt依赖于生成源文件列表的特定include文件,这样include文件上的更改将被检测到,就好

在CMAKE中指定运行时和生成时依赖项

我正在使用CMAKE构建共享库camera,这取决于api。因此,它也是共享库。库camera.so由server可执行文件使用,我在linux上 我在~/projects/server/camera/build中有CMAKE构建目录 生产环境中的服务器具有以下结构: /opt/server 服务器 api.so /lib/ camera.so 我有以下CMAKE脚本: SET(LIB_DIR ${PROJECT_SOURCE_DIR}/lib/Release) ADD_LIBRAR

CMake没有抱怨不存在的文件吗?

我知道可能没有任何解决方法,但我需要为model.dll生成一个源文件dllmain.c。这是与一个为我提取一些基本信息的可执行文件一起完成的,因此我当前的CMakeLists如下所示 add_executable(main ${SOURCE} otherListSourcesGoHere) add_custom_command( TARGET main POST_BUILD COMMAND main.exe <--- Main built from above

Cmake 每个可执行文件的不同链接器选项

我想从相同的源文件创建两个单独的可执行文件,但使用不同的链接器参数 通过以上几行代码,我可以毫无问题地生成一个可执行文件: set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs -T libs.ld -T mem.ld -T sections.ld -L\"${CMAKE_CURRENT_SOURCE_DIR}/script\" -Wl,-Map,${MAP_NAME}") add_executable

英特尔OpenVino项目的Cmake抱怨功能定义和缺少OpenVino扩展目录

我尝试编译这个OpenVino示例项目: 当我做cmake时,我不知道为什么它会要求feature_def,我不明白这是什么意思 我还对/opt/intel//computer\u vision\u sdk\u 2018.4.420/deployment\u tools/interference\u engine/samples/extension被认为是一个不存在的目录感到困扰。它确实不存在。我多次尝试重新安装OpenVino,但都没有解决问题。请帮忙,任何建议都将不胜感激。提前谢谢 -- T

通过生成器表达式设置CMAKE_SYSROOT

在我们的项目中,我们将根据所选配置进行设置。这是因为配置表达了(除其他外)目标平台(交叉编译——但不仅如此,还有轻微的行为差异) 我们希望通过对多配置IDE友好来表达这一点 然而,我们还没有找到这样做的方法。首先,你会注意到这甚至没有提到这种可能性。我们仍然尝试将其设置为类似的值(不是精确值-只是一个示例!): set(CMAKE\u SYSROOT$) 希望该值在支持的上下文中使用。但显然,事实并非如此。相反,逐字记录值似乎是在--sysroot参数(--sysroot=“\$”)中提供的。

CMAKE\u安装\u路径\u使用\u链接\u路径而不产生任何效果

我想在链接时自动将库的路径添加到RPATH。读了一点之后,我想CMAKE\u INSTALL\u RPATH\u USE\u LINK\u PATH应该可以完成这项工作。不幸的是,以下MWE不起作用: cmake_minimum_required(VERSION 3.9) cmake_policy(SET CMP0060 NEW) set(CMAKE_SKIP_BUILD_RPATH FALSE) # set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) # se

是否在CMakeLists.txt中检测CMake构建目标?

在CMake脚本CMakeLists.txt中,如何检测当前构建目标,例如通过-A选项传递给CMake命令的参数?有变量WIN32来检测Windows,但仍然没有-A选项的参数,如-A X64 在CMakeLists.txt文件中,可以通过变量访问带有-A标志的平台名称 关于你的措辞,让我注意到在CMake中没有像当前构建目标这样的东西。相反,CMakeLists.txt文件定义了生成的Makefile中可用的目标,例如通过添加可执行文件或由CMake创建的添加库。CMake本身不为特定目标执行

在CMake脚本中的目标链接库之前,验证库是否可用

我有一个大型项目,由几个构建目标组成,它们之间有依赖关系。结构类似于这样的东西: Application <-- Library I <--- Library II <-- Library III <---| <-- Library IV 应用程序检查库目标,而不是文件: if(not TARGET library_2) message(SEND_ERROR "Attempt to link to non-ex

Cmake OpenMP未在macOS Catalina中构建/链接?

我正在尝试构建一个项目,但OpenMP有一些问题 这是我正在使用的cmake: cmake_minimum_required(VERSION 2.8.6) project(render LANGUAGES CXX) link_directories(../core/) include_directories(../core/) find_package(DART REQUIRED COMPONENTS gui collision-bullet CONFIG) find_package(Ope

CMake自定义命令中可执行文件的对象文件

我有一个在预链接阶段执行的自定义命令。 我要做的是计算将成为可执行文件一部分的所有部分的校验和。然后我想把这个校验和作为一个全局变量链接到我的可执行文件中 到目前为止,我可以计算所有要链接到可执行文件中的库的校验和。但是我还需要exe的已经存在(因为它已经被构建)的对象文件的校验和。 有没有办法访问此对象文件 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/checksum.cpp PRE_LINK COMMAND $

Cmake 如何使用C+;手动创建Windows运行时组件+/温特?

我试图理解这一点,这样我就可以使用CMake启动并运行一个项目 假设我有以下IDL文件: 名称空间HelloWorld{ [默认_接口] 运行时类HelloWorld { HelloWorld(); 字符串SayHello(字符串名称); } } 生成我可以使用的Windows运行时组件需要在命令行上执行哪些步骤 我试图理解这一点,这样我就可以使用CMake启动并运行一个项目 这牵涉其中。开始吧,谢谢你。我很困惑,因为我不知道cppwinrt如何与所有这些联系在一起。由midl生成的Hello

Cmake 如何解决diamond子项目依赖中的目标重新定义问题?

有两个liblibA和libB,具体取决于libBase,并将其包含在构建过程中 add_子目录(../libBase build/libBase) 当它们单独构建时,一切都可以工作。但当projectprj希望将所有内容都包括在其构建过程中时: add_subdirectory(../libA build/libA) add_subdirectory(../libB build/libB) 然后,对目标重新定义提出投诉: add_library cannot create target "l

我有一个Cmake的编译器错误,我应该怎么做? 在过去的两天里,我一直试图在CLion上开始C++代码的编写,我遇到了CMAK的问题。如有任何建议,将不胜感激。我尝试删除CYON和重新下载,我尝试了在C++中找到不同的CMADE选项。任何帮助都将不胜感激

您还必须在命令行中安装编译器。我想XCode已经安装好了。此外,您还需要通过“xcode select--install”(可能使用sudo)安装命令行工具,以便在控制台中获得while编译器工具链。 您可以通过“铿锵--version”等检查编译器是否在终端中工作。 无论如何,当您询问时,请保留有关您的开发环境的清晰信息。我需要安装XCode,因为XCode包含编译器。 欢迎使用堆栈溢出!请具体说明你正在努力实现的目标。现在,你的问题很广泛。请提供您的C++/CMake代码以及您可能遇到的任何

C++;AVRO,CMAKE失败了

我正在构建avroc++,但是当我使用CMAKE构建时,我遇到了一些麻烦。我的CMAKE版本是3.5,而Boost版本是1.73.0 错误: CMake Error at /usr/local/lib/cmake/Boost-1.73.0/BoostConfig.cmake:240 (if): if given arguments: "ALL" "IN_LIST" "Boost_FIND_COMPONENTS" Unkn

CMake的midl.exe和cppwinrt.exe存在问题

这在某种程度上是对 我的CMakeLists.txt中有这个。我的问题不是关于CMake逻辑,而是关于midl和cppwinrt命令的输出,以及编译和链接过程中的后续错误。我怀疑我可能缺少一些命令行选项 # Pathnames for WinRT References set (WINSDKREFDIR "$ENV{WindowsSdkDir}References\\$ENV{WindowsSDKVersion}") # Remove trailing \ from $EN

是否可以检测到CMake首次运行?

我需要检测删除缓存或清空build dir后第一次按下[Configure] 这个代码不起作用 if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt") set(CMAKE_FIRST_RUN "FALSE") else() set(CMAKE_FIRST_RUN "TRUE") message("FIRST RUN") endif()

从env var获取路径-#x27;t无法在CMakeList.txt中正常工作

我正在使用CMakeList.txt文件,需要设置库的路径。目前我是这样做的: set(pathToOpenCv D:\\OpenCV-android-sdk) ,但我想将此硬编码路径更改为相关路径。为了做到这一点,我保存了键值env var OPEN_CV_PATH = D:\\OpenCV-android-sdk 并编辑了CMakeList.txt set(pathToOpenCv ${OPEN_CV_PATH}) 但我有一个错误: Execution failed for task

SFML 2.5+;还有CMake

在SFML2.5中删除了FindSFML.cmake,导入它的首选方式是什么 我尝试了这个,但找不到SFMLConfig.cmake cmake_minimum_required(VERSION 3.17) project(untitled) set(CMAKE_CXX_STANDARD 20) find_package(SFML 2.5.1 COMPONENTS graphics REQUIRED) add_executable(untitled "main.cpp")

上一页   1   2    3   4   5   6  ... 下一页 最后一页 共 119 页