我试图搜索CMake文档,但我不知道如何从CMake调用外部程序
我想做的事情很少
编译使用makefile的其他第三方依赖项
将定义文件编译为C++/Python存根。
编译定义文件
另一个问题是,处理这些案件的好方法是什么?当CMake中的“C”代表跨平台时,直接从CMake调用shell脚本感觉不那么干净
编辑:我有几个额外的问题。之前,在我的构建中,我预先构建了依赖项,项目本身使用FIND_包(…)来查找依赖项的头/库
现在,我正在使用ExternalProject_Add()编译依赖项
我需要编写一个自定义命令,在文件a比文件B更新时运行。如何在CMake中执行此操作?谢谢 听起来你想要类似的东西:
add_custom_command(OUTPUT B
COMMAND ${CMAKE_COMMAND} -Dinput=A -P script_that_generates_B.cmake
DEPENDS A
)
其中“B”是输出文件的完整路径,“A”是某个输入文件的完整路径,该命令在生成时运行,每当A发生更改时生成B
为了在构建时执行生成B的规则,还必须依赖于B。
调用文件(GLOB…时,CMake将正则表达式应用于它能找到的所有文件。问题是它是只在第一次cmake调用时执行,还是每次都执行
换句话说,使用文件(GLOB…是否会减慢生成文件的重新生成过程?同样的问题也可以应用于文件(GLOB_RECURSE…每次都会这样做(结果自然可能不同)
别担心它会让你慢下来。构建系统必须在每次调用时对数十个、数百个或数千个文件执行stat(或等效)操作,一两个glob甚至不会显示为一个光点。每次都会执行此操作(结果自然可能不同)
别担心它会让你慢下来。构建系统每次调
我想获取一个已设置为路径元素组合(可能是绝对和相对)的变量,并从中获取绝对路径。类似于 Booo::FielSoe::StulySufEngule[()/在C++中运行。例如,我有一些类似于:
set(EXTERNAL_LIB_DIR "${CMAKE_SOURCE_DIR}/../external" CACHE PATH "Location of externals")
它可以工作,但在UI中有点难看,因为它可能最终看起来像C:/dev/repo/tool/。/external。我想知道在编
我需要一些帮助,用cmake编译这个项目。这是错误消息
$ ./build_avida
-- Building for: NMake Makefiles
CMake Warning at CMakeLists.txt:1 (PROJECT):
To use the NMake generator, cmake must be run from a shell that can use the
compiler cl from the command line. This environ
标签: Cmake
static-librariesstatic-linking
我使用CMake 2.8构建基于MQX操作系统的应用程序(使用CodeWarrior)。
CMake项目基本上构建了一组静态库(比如LIB1和LIB2)。
然后,我在最终可执行的cmake规则中引用这些库:
target_add_executable(X ${some_sources})
target_link_libraries(X LIB1 LIB2)
我的问题是一些符号在多个库中定义。
因此,可以使用如下链接命令:
mwldarm <args> -o <output&g
我有一个变量XX可以通过CMakeList生成。所以我通常做的是:
set(X_OVERRIDE CACHE STRING "" "Overrides the generated value for X")
MARK_AS_ADVANCED(FORCE X_OVERRIDE)
IF("${X_OVERRIDE}" STREQUAL "")
set(X ${GENERATED_X})
ELSE()
SET(X ${X_OVERRIDE})
ENDIF()
人们通常就是这样做的吗?您的方法的独特特
我有一个使用交叉编译器的嵌入式项目。我想介绍一下GoogleTest,它是用本地GCC编译器编译的。另外,使用CTC编译器构建一些单元测试目标
简而言之:
我有3个不同的目标,并用3个不同的编译器编译它们。如何在CMakeLists.txt中表达?我尝试了设置目标属性
但似乎无法使用此命令设置CXX变量 CMake是一个make文件生成器。它会生成一个文件,然后您可以使用该文件进行构建。如果要创建多个目标平台,则需要使用不同的生成器多次运行CMake
因此,您想在CMake中执行的操作是不可能的
标签: Cmake
shared-librariesstatic-libraries
我想从ZIP文件中提取一个静态库,并对其进行链接
具有以下设置:
add_library(COMSDK_LIB STATIC IMPORTED GLOBAL)
set_property(TARGET COMSDK_LIB PROPERTY IMPORTED_LOCATION "/tmp/lib/libRTSClientSdk.a")
导入的库正在另一个CMakeLists.txt中使用:
target_link_libraries(mylib COMSDK_LIB)
导入的库是否可能由另一个
在这本书中,我看到一个表达:
externalproject_add_step(${_name} BuildOtherConfig
COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --config "$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>" --target INSTALL
我正在尝试使用添加编译选项将cmake与以下编译选项结合使用:add\u compile\u选项(-pipe-O2-std=c++98-W-Wall-pedantic)
但它似乎并没有在编译过程中实际使用
make-n | grep pedantic不返回任何内容
仅供参考,我的cmake命令及其返回的内容:
cmake -G"Unix Makefiles" -DARCH:STRING=x86 -Bosef -H. -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_
我试图根据处理器类型设置一组CXX标志
IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAMD64")
ELSE()
STRING(FIND ${CMAKE_SYSTEM_PROCESSOR} "86" 86_res)
IF(${86_res} EQUAL -1)
SET(CMAKE_CXX_FLAGS "${CMAKE_CX
我需要ExternalProject\u Add为makefile执行所有必要步骤的外部项目调用一个命令。我需要在外部项目源代码树顶部的目录中使用“make WITH_OPTION1=no WITH_OPTION2=no”命令。这是我们使用的几十个外部项目之一。大多数符合“配置”模式;制作让安装'但一个好的第三个不这样做,这是一个我认为会很容易
如果我尝试像这样调用make命令:
ExternalProject_Add(build-example
PREFIX "${CMA
标签: Cmake
openmpicmake-modules
我使用自制软件安装了OpenMPI,使用brew安装OpenMPI
如果在命令行中运行mpic++main.cpp,则代码编译正确。然后我可以使用mpirun a.out运行它
现在的问题是,当我在Clion中创建CMakelists.txt文件时,它似乎无法找到打开的MPI包:
cmake_minimum_required(VERSION 3.15)
project(project)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_PREFIX_PATH "/us
我正在尝试按照说明在Windows 10上安装Openbr
步骤4(下载并安装Qt5.4.1)中的链接已失效,因此我从下载了Qt开源版本
当我在步骤6中尝试构建Openbr时,cmake步骤失败
cmake -G "CodeBlocks - NMake Makefiles" -DCMAKE_PREFIX_PATH="C:/opencv-2.4.11/build/install;C:/Qt/Qt5.4.1/5.4/msvc2013_64" -DCMAKE_I
在CMake中,如果目录不存在,我想创建一个目录。如何创建此目录?何时创建目录
在构建系统生成时
要在CMake生成生成系统时创建目录
file(MAKE_DIRECTORY ${directory})
在构建时
在add_custom_command()命令(向生成的生成系统添加自定义生成规则)和add_custom_target()命令(添加没有输出的目标,以便始终生成)中,指定要在生成时执行的命令。通过执行命令${CMAKE_command}-E make_directory创建目录。例
我尝试使用cmake编译项目,但出现以下错误:
mostafa@ubuntu:~/oooark$ cmake .
CMake Error at CMakeLists.txt:19 (message):
In-source builds are not allowed.
例如,运行:
rm CMakeCache.txt
mkdir build
cd build
cmake ..
make
-- Configuring incomplete, errors occurred!
有人能帮我
我用firebreath制作了npAPI插件
我的代码使用了giblib,所以我在CMakeLists.txt中添加了这段代码
find_library(TESTLIB_LIBRARY2 giblib)
include_directories(${TESTLIB_INCLUDE_DIRS})
target_link_libraries(UbuntuCaptureTest TESTLIB_LIBRARY2)
我对cmake是个新手
所以我学习了一些关于CMake的教程和firebreath主页上
在我的工具链文件中,我一直在尝试使用以下行将CPP编译器设置为g++
# specify the cross compiler
SET(CMAKE_CXX_COMPILER:FILEPATH /opt/qnx641/host/linux/x86/usr/bin/arm-unknown-nto-qnx6.4.0-g++)
这似乎没有被使用,所以我尝试了一些正确的东西只是为了苏
SET(CMAKE_C_COMPILER:FILEPATH /junk/gcc)
好吧,太夸张了,但这样我肯定CM
我有一个CMake结构:
主要项目/
mainproject/cmake/FindMyPackage.cmake
mainproject/CMakeLists.txt
插件/
plugin/CMakeLists.txt
在上面的CMakeLists.txt中,我调用
在上面定义的目录之外添加plugin/CMakeLists.txt子目录
在第二个CMakeLists.txt中,我调用findpackagempackage REQUIRED
其中给出了错误消息:
CMake Error at [
我正在Ubuntu上安装库。我按照说明在下载的源目录旁边创建了一个“构建目录”。也就是说,我有两个目录:eigen-eigen-1306d75b4a21用于源代码,一个空的eigen-build用于构建
然后我做了:
cd eigen-build
cmake ../eigen-eigen-1306d75b4a21/
sudo make install
make install之后立即发生错误,并停止安装:
CMake Error: The source directory "/home/use
是否可以使用cmake在一个平台上为另一个平台生成构建系统?例如,我最感兴趣的是,是否可以为Linux项目生成一组Visual Studio解决方案文件,或mingw32 make make文件,或nmake文件
其目的是制造类似于makedisttarget在automake中生产的东西。但是,我不需要像make dist那样使用它,也就是说,我只想生成解决方案文件,就像在Windows中运行cmake一样
然后,用户可以在自己的机器上使用创建的构建系统构建包
如果可能的话,我该怎么做?Cma
如何将特定于项目的变量传递到子目录?我想知道是否有一种“官方”的方法可以做到这一点:
# (CMAKE_BUILD_TYPE is one of None, Debug, Release, RelWithDebInfo)
# ...
# set specific build type for 'my_library'
set( CMAKE_BUILD_TYPE_COPY "${CMAKE_BUILD_TYPE}" )
set( CMAKE_BUILD_TYPE "Release" )
add
我正在学习CMake,在理解其多步骤工作流程方面遇到了问题。到目前为止,我的理解是您:
编写一个CMakeLists.txt
从子目录运行cmake,生成生成文件(在我的例子中是生成文件)
运行make
但是,我不明白您应该如何处理不同的目标(发行版与调试版)。通过在两个不同的子目录中运行CMake
另外,我不明白你为什么要编辑cmakcache.txt(还有一个GUI工具)。要通过传递不同的选项来模拟您使用/configure将要完成的任务?您做得非常正确。write CMakeLists
我在配置模式下使用find_包查找Qt5:
find_package(Qt5 CONFIG REQUIRED COMPONENTS Core)
我没有指定CMAKE_PREFIX_路径,路径中未设置/home/user/Qt/5.5/gcc_64/bin,但CMAKE会查找*Config.CMAKE文件:
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5/Qt5Config.cmake
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5Co
标签: Cmake
clionlibwebsockets
我正在尝试在CLion的项目中构建libwebsockets。在构建过程中,libwebsockets创建其他文件所需的头文件,并将其放入PROJECT_BINARY_DIR中。CLion在为项目创建的随机构建目录中构建所有内容,并且头文件最终位于该目录中。我试过:
设置websockets\u BINARY\u DIR变量
设置CMAKE\u RUNTIME\u OUTPUT\u目录变量
设置CMAKE\u LIBRARY\u OUTPUT\u目录变量
更改CMake缓存中的每个变量,使其远
我有一个C项目,它支持许多平台。它的发电机坏了
Makefiles、NMake Makefiles、MSVC 6、7、8、9、11、Eclipse CDT4-Unix
Makefiles等。我在Windows7上用cmake生成了MSVC9解决方案。信息技术
没关系
现在,我想在的TI Sitara SDK上生成ARM Cortex A8项目
以上C项目。TI Sitara SDK安装在Ubuntu 14.04操作系统主机上
电脑。有一个交叉编译工具链:Ubuntu PC上的Linaro
从原始
我是否可以删除以下类型的CMake进度消息:
[1%]制作[5]:进入目录…
[9%]正在生成CXX对象
我尝试过将CMAKE\u VERBOSE\u MAKEFILE,CMAKE\u COLOR\u MAKEFILE设置为关闭,以及其他设置,但都不起作用。
我在这里发现CMAKE\u RULE\u MESSAGES=OFF:
但对我不起作用。
还添加了此处建议的功能:
并且对我也不起作用。将全局属性设置为关闭:
您引用的文档说明:如果存在CMAKE\u规则\u消息缓存条目,则其值将初始化此属性
是否可以更新用户定义的函数print2Argss.t。它将接受诸如内置CMake函数之类的选项?CMake通过CMakeParseArguments提供此功能。您没有像在示例中那样在函数签名中指定参数
CMake接受的参数多于函数签名中给出的参数。在变量中定义选项、单值参数和参数对,并将它们传递给cmake\u parse\u arguments。此命令设置多个变量,您可以使用这些变量检查设置了哪些参数
文档和示例:
function(print2Args arg1 arg2)
messa
假设我有这样的项目:
Root
+-- SubA
+-- SubB
+-- SubC
...
所有子文件夹都有自己的CMakeLists.txt,根文件夹如下所示:
add_subdirectory(SubA)
add_subdirectory(SubB)
add_subdirectory(SubC)
如果我通过make开始构建,3个子项目将一个接一个地构建,如果我通过make-j4开始构建,那么顺序可能是随机的
我想问的是如何设置这些子项目之间的依赖关系。如何使SubB和S
我正在使用CMake 3.5.2
考虑以下情况。我有一个导入的库Foo::Foo:
add_library(Foo::Foo UNKNOWN IMPORTED)
已使用适当的属性填充此导入的库:
set_target_properties(Foo::Foo PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "/path/to/include/blah" "/another/path/include/other"
IMPORTED_LINK_INTERFA
CMAKE_项目名称和项目名称之间有什么区别
从文件中:
当前项目的名称
这将从最近继承的project()命令中指定当前项目的名称
指定给project命令的项目的名称
这是最新的project()命令的名称
我不明白有什么区别
我应该在什么时候使用CMAKE\u PROJECT\u NAME?什么时候应该使用文档中的PROJECT\u NAME?,我看不出这两个变量之间的区别
不同之处在于,CMAKE_PROJECT_NAME是来自根CMakeLists.txt的上一次PROJECT调用
作为构建过程的一部分,我们将构建的二进制文件安装到特定位置
我有一个定制的cmake脚本,它检查构建的二进制文件的时间戳,如果它比安装的二进制文件更新,则复制它
以下是脚本的摘录:
if(SRC_FILE IS_NEWER_THAN DEST_FILE)
message(STATUS "installing ${DEST_FILE}")
execute_process(
COMMAND
${CMAKE_COMMAND} -E make_d
当我安装库时,它会转到${CMAKE\u install\u PREFIX}
当我find_包(a库)时,它搜索${CMAKE_INSTALL_PREFIX}
在windows中,${CMAKE\u INSTALL\u PREFIX}默认为c:\Program Files。这很有效。但是在${CMAKE\u INSTALL\u PREFIX}中,默认为c:\Program Files\${PROJECT\u NAME}
现在,当我安装库A时,它会转到C:\Program Files\A
当我从库
在决定构建什么以及如何构建之前,我们需要确定GNU的AS(GAS)版本。一些较旧的GAS,如CentOS 5和OpenBSD 6的分布式GAS,无法处理SSE4及以上版本。我们需要禁用使用SSE4、AES-NI、SHA、AVX和BMI的代码路径
我们的主要构建系统是GNU Make,它:
根据Cmake的说法,Cmake对程序集源文件具有基本支持。但是它没有讨论如何获得汇编程序的版本
在使用CMake时,我们如何确定汇编程序版本?而不是试图找到汇编程序版本,并硬编码一个关于哪些汇编程序版本支持哪
我正在尝试构建一个包含单个bash脚本的debian包。脚本由以下程序生成:
go.sh:
#!/bin/bash
cat >main <<EOF
#!/bin/bash
echo $@
EOF
chmod +x main
这只会给我一条神秘的错误信息:
CMake Error at CMakeLists.txt:7 (install):
install TARGETS given target "main" which is not an executable, l
我更改了cmake版本,现在似乎发布的.pdb文件始终称为“vc100.pdb”
我想更改该名称,覆盖cl.exe的/Fd标志
更改CMakeLists.txt时,此操作有效:添加编译选项(“/FdRelease/.pdb”)
这不起任何作用:set\u属性(源属性COMPILE\u PDB\u NAME.PDB)
在我看来,第二个选项是正式的,但我无法让它工作,文件仍然称为“vc100.pdb”。
为什么它不起作用?如果我决定第一种方法,有什么需要考虑的吗?
Windows 10 64位,cm
我有一个文件version.txt
VERSION_MAJOR 1
VERSION_MINOR 1
VERSION_PATCH 3
我想使用cmake为主要、次要和补丁添加定义
我试过使用
file(STRING "version.txt" myvar)
但这只是将整个文件放入myvar
如何获取数字?您使用的文件不正确,您想使用它将文件内容读入变量
file(READ "version.txt" ver)
将文件内容放入变量后,就可以与捕获组一起使用,并使用
创建一个带有捕获组的正则表
考虑到以下因素:
option (BUILD_SERVER "Build in server configuration" OFF)
option (BUILD_TOOLS "Build external tools" ON)
if (BUILD_SERVER)
set (BUILD_TOOLS OFF)
endif()
message (STATUS "BUILD_TOOLS : ${BUILD_TOOLS}")
然后使用ccmake打开BUILD_服务器,然后进行配置,然后手动重
我正在尝试为我的应用程序编写一个Travis CI脚本,它需要CMake 3.5或更高版本。可以找到整个Travis脚本。根据我在别处找到的建议,我使用以下方法安装CMake:
install:
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
标签: Cmake
googletestgmock
我尝试在windows下从google构建gmock库,可在github上访问:
我试图在cygwin控制台中使用cmake,但无法构建它
cmake C:\Users\Username\Downloads\googlemock-master\googlemock-master\googlemock
"CMake Error: The source directory "C:UsersSETDownloadsgooglemock-mastergooglemock-mastergooglemo
我需要在Ubuntu版本不同的机器上使用自定义llvm/clang。
我想用静态库替换所有共享库(libc、libm等)来构建我的llvm/clang,以避免过时的共享库导致运行时崩溃。默认情况下有没有链接静态库的方法
我使用CMake来构建clang,并想知道是否有类似于build\u SHARED\u LIBSflag的东西来控制系统库
我的问题与。“我想用静态库替换所有共享库(libc、libm等)来构建llvm/clang”-您有这些库的静态版本(libc、libm)吗?据我所知,gcc
我想在安装目标后在其上运行命令。我看到“”,它似乎是关于在安装所有内容后运行单个脚本。我的问题是每一个目标脚本
我要做的是在已安装的二进制文件上运行patchelf,以更改解释器。这与cmake如何更改已安装二进制文件的RPATH非常相似。看看如何做到这一点,我在cmake_install.cmake(为简洁起见编辑)中看到了这些内容:
这将更改rpath,并在安装二进制文件后剥离它。似乎我所需要做的就是再放一个execute\u进程来运行我的patchelf命令。但我找不到任何方法让cmake
CMake的if命令[1]支持多个签名,从
if(<constant>)
if(<variable|string>)
if(NOT <expression>)
if()
if()
如果(不是)
如何否定前两个
如果CMake文档是正确的(根据我的经验,这还远远不能确定),那么我的问题可以归结为:
如何将常量、变量或字符串X转换为表达式,并要求X作为布尔值进行计算
[1] 实际上,只是任何参数的占位符,如果,可以将其传递给。甚至可能的if结构列表也被命名为“
标签: Cmake
shared-libraries
使用Cmake,我想知道如何创建包装器库,并让用户仅将其应用程序链接到此库。用户不需要在其链接器标志中指定原始库
例如,我为libwebsockets创建了一个包装器库,名为libcustomws
add_library(customws main.c)
target_link_libraries(customws websockets)
我希望用户(未安装libwebsockets)能够执行以下操作:
add_executable(user_app user_app.c)
target_li
有没有办法指定compile_commands.json的位置
没有办法。我相信设置时生成的compile\u commands.json的路径是正确的
只需创建一个符号链接compile_commands.json->./build/compile_commands.json啊,太糟糕了。那样的话,我就得围绕这个问题写了。顺便说一下,谢谢你的源链接!
我正在尝试为一个班级做一个项目,我想用CMake来构建这个项目。我当前的项目看起来像
|-bin
|-CMakeLists.txt
|-include
|-asio-1.12.2
|-chat_message.hpp
|-chat_message.cpp
|-CMakeLists.txt
|-src
|-Server.cpp
虽然my Server.cpp需要/include/asio-1.12.2/include中的asio.hpp。
教授有一个makefile,它用标志编译它
-
我正在尝试使用CMake使用cuda编译一个库
我希望cuda是可选的,也就是说,如果系统上没有nvcc,我希望我的库可以编译
以下是我如何检查我的CMake中是否有cuda:
include(CheckLanguage)
check_language(CUDA)
if (CMAKE_CUDA_COMPILER)
enable_language(CUDA)
else()
message(WARNING "CUDA not found: GPU features won't be
我们完成了从常规规范文件(rpm)到cpack的转换,并在构建中添加了.deb包
我能够复制rpm规范文件中的所有内容,除了\uuuu requires\uu exclude\u from。
我们有一个需要可选库的文件。(包含的二进制文件是可选的,仅在用户需要时调用),但生成的rpm/deb包仍然需要依赖关系
在RPM规范中,我们从依赖项扫描中完全排除了这个特定的二进制文件,这非常有效,但我无法在RPM和DEB生成器的cpack中重现它
我能想象的唯一方法是创建/使用我自己的规范文件作为模板,但
我们有一个包含许多模块的大型项目(共享库)。它们没有静态依赖关系,工作起来更像插件。我们希望构建系统能够在构建特定的可执行文件(exeA)时使用find_包(modA)。我们也不希望生成的项目文件包含每个模块(在VisualStudio等中很难处理),因此它应该只包含(添加库)由特定的CMakeLists.txt(exeA)构建的可执行文件所需的模块。
一种方法是使用helper函数从项目根文件夹中查找所有Config.cmake文件,并将它们添加到cmake_PREFIX_PATH或生成根变量
上一页 1 2 ...
8 9 10 11 12 13 14 ...
下一页 最后一页 共 120 页