我将CMake 2.8.1(在Windows上)与“Visual Studio 10”生成器一起使用GLOB和source\u组似乎没有协同工作。有没有办法让它发挥作用
我使用file(GLOB…创建.cpp文件列表,然后使用source\u group在生成的Visual Studio项目中创建过滤器:
# C:\Users\My Name\hello\CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
project( hello_pro
出于某些原因,我试图在我的项目中摆脱cmake。我需要创建unix makefiles来构建我的项目。如果我使用cmake为我生成它们,那么生成文件无论如何都将依赖于cmake。我唯一可以使用的构建工具是GNU工具链中的一个。cmake是一种创建makefile的便携式方法。如果你想有一个替代方案,看看。该工具与许多工具链(在bjam术语中称为工具集)配合使用,并且与cmake一样易于使用
如果你真的想摆脱cmake或bjam,那么就以cmake生成的文件为基础编写你自己的Make文件吧。。。但
我正在尝试编写一个宏,它遍历给定的库列表。但是,宏中的消息调用仅打印列表的第一项。我做错了什么
代码:
输出:
message( "outside lib1 lib2 lib3" )
message( "inside lib1" )
在将变量传递给宏时,将其引用:
FindLibs("${LIBRARY_NAMES_LIST}")
根据(几乎)的说法,${ARGV}符号应该扩展到整个参数列表。这将使调用位置的操作更简单。您的宏应如下所示:
macro(FindLibs list_var_na
我有一个cmake构建,其中我正在搜索一系列依赖项,即我有许多以下实例:
FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
include_directories(${SOMEPACKAGE_INCLUDE_DIR})
link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
现在,我想添加一个自定义命令来构建一个预编译的头文件,但要做到这一点,我需要知道我的incl
标签: Cmake
parallel-builds
无论使用哪种构建工具,都可以进行并行构建吗
在Unix下,我们可以添加make-jN,其中N是线程数,在Windows下,我添加了CXX\u标志/MP”,然后在Visual Studio中使用它来并行构建…(?)我如何使我的版本在运行CMAKE时不总是扩展CMAKE\u make\u程序
什么是一般解决方案
我想到了这个:
# Add some multithreaded build support
MARK_AS_ADVANCED(MULTITHREADED_BUILD)
set(MULTIT
当我试图在Windows上构建yaml cpp时,我不断遇到一个错误。
使用CMake gui应用程序,我正确选择了build-and-sourcepath,但只要点击“配置”按钮,就会抛出以下错误:
CMake Error: CMake was unable to find a build program corresponding to "**MinGW Makefiles**". **CMAKE_MAKE_PROGRAM** is not set. You probably need
我有一个带有CMakeLists.txt的子目录,它应该使用make编译一个库,并将结果作为导入的库导出到父目录:
set(static_lib ${CMAKE_CURRENT_BINARY_DIR}/lib/mylib.a)
add_custom_command(
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT ${static_lib}
COMMAND make
COMMAND make instal
我在contrib下的库Poco中找到了一个PocoConfig.cmake,我在/cmake/Modules下复制了它
我还在我的CMakeLists.txt中添加了:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
现在我在/Build/cmake下运行
我不断得到:
CMake Error at CMakeLists.txt:41 (find_package):
By n
我有一个下面的cmake文件
cmake_minimum_required(VERSION 2.6)
# Locate GTest
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(../src/gcc_xml_parsing)
file(GLOB info_model
"../src/info_model/*.h"
"../src/info_model/
我正在用cmake编写构建配置:除了带有自己代码的主项目外,还有一些外部库。为了方便更新这些库(zlib、libpng等),我不想修改它的cmakelists文件,但我需要特定的库目标(例如在target_link_libraries()中使用)。
另一个限制是,我不能只说我的代码需要安装外部库,所有东西都必须位于一个源代码树中,并且必须一起构建。
为了使库提供的所有内容保持结构化(libs、headers),我想将库(如makeinstalldoes)安装到本地建筑文件夹中,然后包括生成的cm
是否可以修改CMAKE\u SOURCE\u DIR以“欺骗”CMAKE,使其认为顶级CMakeLists.txt文件在其他地方
我有以下目录结构:
\src <--- not a repository
\cmake <--- repository
\common <--- repository
\project1 <--- repository
...
CMakeLists.txt
当我发现我的Ubuntu是32位安装的,尽管我的处理器实际上是64位,但我一直在使用CMake,没有问题。哎呀
我重新安装了Ubuntu和我使用的各种开发包。现在,当我运行make时,会出现如下错误:
[ 1%] make[2]: *** No rule to make target `/usr/lib/i386-linux-gnu/libQtGui.so', needed by `/home...
/usr/lib/i386 linux gnu/libQtGui.so`不存在,但/usr/
我目前正在使用SDL2 ttf库编写一个SDL2程序,并希望在CMakeLists.txt中添加对它的检查。我该怎么做
我正在使用CMake 3.1。FindSDL\u ttf.CMake是CMake 3.x的一部分,只需使用即可
find_package(SDL_ttf REQUIRED)
FindSDL_ttf不能与SDL2一起使用,因此您必须使用第三方选项
我用过这个,它很有效:
只需将它放在set(CMAKE\u MODULE\u PATH/PATH/to/file)包含的目录中
然后
标签: Cmake
cross-compiling
我正试图在ubuntu上为raspberry编译一个可执行文件
我已经配置了crosstools ng,并使用了cmake。
我的可执行文件使用其他库(例如libfastcgi)。
我已经为raspberry创建了一个工具链文件,其中CMAKE_FIND_ROOT_PATH引用了crosstolls ng生成的二进制文件和raspberry的一个安装点
cmake成功,find_库正常,在raspberry安装点上找到其他库成功
但是make命令失败,没有找到附加库的头文件,而它们位于raspb
在我所有的项目中,我必须做同样的事情,包括:
示例:“MyApplication”的CMakeLists.txt
在本例中,FindMyGtk中已经有了“FindMyBase”。
那么为什么我需要在MyApplication中包含FindMyBase?
一旦一个.cmake文件被包含进来,有没有一种方法可以使它在下面的链中的所有其他项目中保持可用
更新1:这样做的目的是避免每次都搜索MyBase,如果它已经找到一次
更新2:目标也是减少包含的数量。在我的例子中,从2到1,但是如果你有10个包含
我对c++一无所知。我安装了两个名为ITK的软件包版本。出于某种原因,4.8版本在/usr/local/lib/cmake/ITK-4.8/UseITK.cmake和3.16文件/usr/local/ITK/lib/InsightToolkit/UseITK.cmake
所以现在,我正在尝试构建一些需要3.16版本的项目,该版本的CMakeLists.txt中包含以下内容:
find_package(ITK)
...
include( ${ITK_USE_FILE} )
但是${ITK\u U
标签: Cmake
targetopencv3.0
我正在尝试使用cmake编译包含OpenCV 3.0的代码。我试着让它尽可能简单:
project(xxxxx)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
find_package(OpenCV)
message("Libs: ${OpenCV_LIBS}")
message("Include Dir: ${OpenCV_INCLUDE_DIRS}")
include_directories(${Op
标签: Cmake
static-libraries
我在我的项目中有一个静态库,我们称之为libcommon,我包含了这个库中的头文件include,而不是角括号,也不是上引号。如何配置CMakeLists.txt以使其找到包含
假设目录结构如下所示:
-- root/
\-- src/
| |-- libcommon/common.h
| \-- main/main.c
\-- CMakeLists.txt
我试过:
include_directories (... src)
以及:
但是找不到lib
标签: Cmake
libmysqlimport-libraries
我需要将我的项目链接到libmysql.dll动态库(我需要这样做,因为我正在将我的项目构建为/MDd,参考:)
现在棘手的是,它是一个导入库(参考:),因此也有一个libmysql.lib
我正在使用CMake进行构建:
set(MYSQL_DIR "C:/Program Files/MySQL/MySQL Connector C 6.1"
CACHE PATH "The path to the MySQL C API library")
include_directories(${M
正如主题所说,我在非根服务器上安装spectrum2时遇到问题。主要的问题是,我必须从源代码构建很多依赖项,并将它们正确链接。我已经在/home/$USER/log4cxx_build/apache-log4cxx-0.10.0中安装了log4cxx及其依赖项。尝试cd-libtransport和make时,我得到以下结果:
$USER@puppis libtransport]$ make
[ 1%] Built target pb
[ 1%] Building CXX object plu
我正在尝试使用VisualStudio14使用CMake构建一个c项目,但是我无法覆盖CMake设置的编译器标志,这会导致项目无法构建。我在CMakeLists.txt文件中使用此方法
set(flags /nologo /c /EHsc /GS- /MTd /Od /TC /Zi /Zp2 /D _USING_V110_SDK71_)
set(CMAKE_C_FLAGS ${flags})
set(rc_flags /l0x809)
set(CMAKE_RC_FLAGS ${rc_flags}
我有一个cmake项目,它使用cpack生成一个zip文件和一个debian包,我希望能够为两个版本的包安装不同的文件
更具体地说,这里是一个示例CMake文件,它同时生成zip和debian包:
cmake_minimum_required(VERSION 3.5)
project(test_packaging)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_execu
标签: Cmake
ninjaincremental-linking
我在Windows上用CMake和忍者生成器构建了一个共享库。我想使用增量链接来减少链接所需的时间
我试图将CMAKE\u SHARED\u LINKER\u标志设置为“/incremental”,但此标志始终由CMAKE附加的“/incremental:NO”覆盖
我还尝试将MSVC\u INCREMENTAL\u DEFAULT设置为ON,但没有任何效果
那么,我如何使用CMake和忍者生成器获得增量链接呢?将我的评论转化为答案
我在VS工具链文件中使用了类似的集(CMAKE\u EXE\u
我正在为我的Qt5应用程序创建一个cmake项目。现在,当我在Clion中使用cmake编译应用程序时,我遇到了一个致命错误
我的CMakeLists.txt文件如下所示:
cmake_minimum_required(VERSION 2.8.11)
project(Oefening11_kv)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CM
我刚刚通过添加以下内容更改了CMakeLists.txt:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc)
SET(CMAKE_CXX_COMPILER /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-
一位同事有一个项目,它使用带有硬编码库路径的手写Makefile。例如,cxflags和LDFLAGS设置如下:
-I/home/personA/libraries/eigen-3.2.7
-I/home/personA/libraries/boost_1_60_0
-I/home/personB/hdf5-1.8.17/include
-L/home/personA/libraries/boost_1_60_0/stage/lib/
-L/home/personB/hdf5-1.8.17/l
cmake-G“Visual Studio 14 2015 Win64”。\wireshark成功
然后,使用msbuild/m/p:Configration=relWithDeInfo Wireshark.sln进行构建会在一段时间后失败,出现4个类似的错误
D:\wireshark\wsutil/file_util.h(32): fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
我的CMake项目有两个目标:
添加自定义目标(CT)-生成“cpp头”或“cpp头+cpp源”。在构建时(当CT构建时)确定是否只生成头或同时生成源
添加库(AL)-生成一些库
AL取决于CT
是否可以将CT生成的源代码编译到库中(必要!!!)并将此库添加为AL的依赖项?恐怕答案是“否”。CMake并不真正支持在CMake自身运行时未知的源代码。如果您可以将CT拆分为一个部分,该部分确定将有哪些源(a部分),以及一个部分实际生成源(B部分),则您可以在CMake时间运行部分a,并使用该信息构建
我正在尝试在CLion项目中使用conan。柯南生成一个conanbuildinfo.cmake文件。在这个文件中,它试图读取另一个文件,该文件也是由conan生成的,名为conaninfo.txt
它无法找到它,cmake打印以下错误:
CMake Error at D:/Sources/vodrm-ecmg_c++/build/conanbuildinfo.cmake:663 (file):
file failed to open for reading (No such file or
一个快速的谷歌搜索(…实际上是许多相当广泛的谷歌搜索)无法解释如何正确记录CMake模块
我要寻找的是一种记录定制CMake模块的方法,以便它们能够使用CMake--help模块命令。有什么标准的方法可以做到这一点吗?谁能给我举几个好例子吗?文档编制过程似乎很奇怪。。。。没有很好的记录。哈哈
使用cmake--help模块的模块是如何记录的
感谢您的帮助。引用我从Brad King(CMake开发者电子邮件列表成员)收到的电子邮件回复:
没有办法做到这一点。唯一的原因——帮助模块存在
这完全是因
标签: Cmake
intelclionintel-fpga
我想要达到的目标
我试图建立一个工具链,为英特尔FPGA编译OpenCL应用程序。因此,在构建基于C++的主机应用程序时,我需要调用OpenCL内核的英特尔OpenCL离线编译器。
仅当cl源文件已编辑或生成的二进制文件丢失时,才应执行此步骤。我的方法是添加一个自定义命令来调用CL编译器,并创建一个依赖于此命令生成的输出的自定义目标。脱机OpenCL编译器称为aoc,由于系统上可能存在多个SDK版本,我使用存储在aocExecutable中的绝对路径调用它。这是我的CMakeLists.txt的
我正在尝试使用MPI(G4MPI)在多个内核中编译Geant4输入。但是make命令产生以下错误:
/usr/bin/ld: CMakeFiles/exMPI01.dir/exMPI01.cc.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from
标签: Cmake
clionlibpngcimg
我正在从事一个需要使用CImg的项目,而CImg又需要libpng。我将CLion和cmake与MinGW-W64 GCC-8.1.0一起使用。我一直在遵循这个答案——把它设置好
这就是我的CMakeLists.txt的外观
cmake_minimum_required(VERSION 3.15)
project(CImgProject)
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_FILES main.cpp)
add_executable(CImgProj
我正在观看一些与CMake相关的教程视频,其中一个()作者在user/local/lib中安装了一个静态库(.a)。我想知道把它放在那里有什么好处。据我所知,编译后,静态库被打包到最终的可执行二进制文件中。根据我的说法,只有共享库才应该移动到/lib文件夹中
或者,对于静态库,这可能是为了避免在构建过程中重新编译。非常感谢您的帮助。通常,安装静态库的原因是能够使用它在目标系统上编译多个可执行二进制文件(即使在不同的包中,也不一定来自同一源代码树)。为此,还有一些打包的静态库,实际上有些包从同一个
我正在开发一个使用CUDA的小型库,但是当我从命令行运行它时,我似乎无法使CMake工作,即使我的IDE(CLion)使用CMake成功地编译程序
多年来,我一直在互联网上搜寻,试图解决这个问题,但没有什么大不了的。我有CUDA 11.1和CMake 3.17.3,它们都可以从命令行访问
CLion能够完美地编译代码,并且一切正常,但是当我从命令行运行CMake时,会出现以下错误:
PS C:\Users\penci\OneDrive\Desktop\Rapid\Temporary\Rapid\
标签: Cmake
sdldependency-management
我正在尝试使用下载SDL2的预构建开发库
因此,它们随后可以由模块拾取
然而,目前我发现find_包在库下载之前就已经被执行,这导致在定位SDL2时第一个干净的CMake构建失败
但是,在第二次运行时,由于预构建的库已经被缓存,因此SDL2位于第二次运行时
关于如何确保在调用find_package之前下载这些预构建库的任何建议
我的CMakeLists.txt文件
cmake_minimum_required(VERSION 3.19.2)
project(racer VERSION 0.1
我有一个小项目,有一个非常简单的CMakeLists.txt文件。在这个文件的底部,我有以下几行:
set (CMAKE_INSTALL_PREFIX /opt/myprod)
message (STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
install (TARGETS myprod DESTINATION bin)
但是,当我跑步时:
sudo make install
我得到以下信息:
[100%
我正在尝试将ccache与CMake一起使用。我在/usr/local/bin中放置了名为gcc、g++和c++的符号链接。如果我运行make,对CMakeLists.txt添加一些不影响编译文件的更改(添加未使用的库以强制生成所有目标),然后重新运行make,所有内容都会重新编译,就好像没有ccache一样。但是,如果我删除所有CMake生成的文件,然后调用CMake;使,一切正常,即使我更改了CMakeLists.txt,也会从缓存中检索对象文件
看起来是CMake生成的阻止命中缓存的内容。
我正在使用Cmake和Cpack来创建linux包。我在/bin/MyProgram中安装我的可执行文件;为了正常工作,可执行文件需要访问外部文件(xml模式)。我希望Cpack生成一个包,将该文件安装在存储可执行文件的位置以外的特定位置(例如/usr/share/MyProgram)
多谢各位 您希望像这样使用安装(文件):
install(FILES files... DESTINATION <dir>
[PERMISSIONS permissions...]
受此启发,我试图创建一个在构建时复制文件列表的
macro (copy_files_at_build_time targetname) #usage: copy_files_at_build_time(<targetname> <file> [<files>] <destination>)
if(ARGC LESS 3)
message(ERROR "copy_files_at_build_time called wit
给定的
文件/usr/lib/gstreamer-0.10/libgstffmpeg.so存在
在CMakeLists.txt中进行更改
方法1查找库()
查找库(GST\u FFMPEG名称gstffmpeg路径/usr/lib/gstreamer-0.10/)
…
目标链接库(MyLibrary或MyExecutable${GST\U FFMPEG})
当我使用上述配置(方法1)运行make时,会出现以下错误
/bin/ld:警告:libvpx.so.1,未找到/usr/lib/i386 l
我有一个使用cmake进行配置和编译的项目,但是这个项目依赖于使用传统configure/make/make安装过程的外部源代码树。是否可以告诉cmake,在编译主项目之前,应该首先调用configure(使用一些特定参数)、make和makeinstall(在外部源代码树上)
谢谢当我遇到这个问题时,我有完全相同的问题
(在我的例子中,我希望正确地将基于Autoconf的libncurses和libcaca作为依赖项(和git子模块)添加到基于CMake的项目中。)
因此,根据mike的评论,
如果我这样做:
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
message("SourceDir: " ${SourceDir})
消息显示SourceDir为空。大概它只是在父范围内设置的。有没有办法在当前作用域和父作用域中设置变量?这样我就不必做:
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
set(SourceDir ${CMAKE_CURRENT_SO
我的编辑器总是生成临时文件,如#foo.cpp或~bar.cpp。
如何从我的glob中排除这些文件
文件(GLOB\u RECURSE SRC\u CPP${PROJECT\u SOURCE\u DIR}SRC/*.CPP SRC/*.cxx)您可以指定文件应以哪些字符开头:
file(GLOB FILES [a-z]*.cpp)
这将只匹配以a-z开头的文件。如果文件以下划线等其他字符开头,只需将其添加到表达式中即可:
file(GLOB FILES [_a-z]*.cpp)
不建议对源
我有一个名为Falcon触觉设备的机器人设备SDK,我正试图编译该公司自己提供的一个非常简单的示例,但我想使用Cmake设置链接和依赖配置
我的磁盘上有流动的文件
SDK
包括
dhdc.h
drdc.h
解放党
dhdms.lib
dhdms64.lib
drdms.lib
drdms64.lib
在另一个目录中,我有我的项目,我称之为MMT
MMT
mmt.cpp
包括
dhdc.h
drdc.h
CmakeLists.txt
建筑
我有以下的cmakelists
cmake_minimum
我们正在移植一些相当旧的代码,当然我们现在想要使用生成器表达式。
byconfigure_文件生成的.pc文件现在包含-I$。
关于如何解析生成器表达式的唯一提示是使用
file(GENERATE
当然,这是在配置步骤中执行的,因此上述表达式解析为空字符串
编辑:
这里有一个例子
CMakeLists.txt:
cmake_minimum_required(VERSION 3.11)
project(test CXX)
add_library(foo SHARED main.cpp)
t
背景:
我想在Windows7上使用带有AndroidStudio的clang和clang++的Obfuscator-llvm-8.0version;
因此,我获得了Obfuscator-llvm-8.0源代码并成功编译了它,然后我将“clang.exe、clang++.exe、clang-check.exe、clang-format.exe”放入原始ndk工具链,即“xxx\ndk bundle\toolschains\llvm\prebuilded\windows-x86_64\bin”;
这对于一个基本的CMake来说是不寻常的,但对于包含多个单独组件的大型项目可能很有用。假设有人使用CPack创建了一个二进制blob,并附带适当的Find*.cmake规则。现在,我们希望在调用相应的find\u包之前自动扩展此存档。如果包没有过时,则无需解压缩归档文件。鉴于find\u package是配置时间,而任何自定义目标都是构建时间,我们如何实现这样的场景?不确定您是否理解这个问题。您可以使用execute\u process在配置时立即运行命令。将execute\u process放
我目前正在为一个大型项目制作一个安装程序,它需要从数据库中获取最新的表。到目前为止,数据库转储是手动完成的,现在我希望在生成安装程序时自动完成。由于已经有一个脚本在执行转储过程,我想知道在生成安装程序之前是否可以让CPack(或CMake)先运行这个脚本?例如,CMakeList中有一条规则:
install(
FILES "../db/structures.sql"
DESTINATION ${INSTALL_DB}
我已经有一个图书馆了。我只是想把这个库链接到我的项目中。我尝试使用find_library()和target_link_library()如何在本教程中显示[https://www.jetbrains.com/help/clion/quick-cmake-tutorial.html#static-库][教程]。但是当我写这个find_库(SRC_INsddfsdfT lib/SRC_intfdssfd libsdfsdfsd)
target\u link\u库(${PROJECT\u NAME}
1 2 3 4 5 6 ...
下一页 最后一页 共 62 页