我正在 GNU Radio 中构建某个模块。(我们称之为我的模块。)
GNU Radio 用于cmake构建和安装一个 my-module。
在项目中,我需要使用一个别人制作的模块。这可以是it++和其他 gnuradio 模块。我将使用 gnuradio 模块。(让我们称之为other-module。)
要在我的 gr 模块中使用其他模块,我需要使用find_package,pkg_check_modules并find_library告诉“我将使用预先构建的模块”
并且pkg_check_modules(PC_ITPP itpp)可以成功检测到它++。
但我很难找到other-module. 正如我所说pkg_check_modules(PC_OTHER_MODULE other_module),它无法检测到模块。
我很好奇的是,moduleinpkg_check_modules(<PREFIX> <MODULE>)代表什么以及 cmake 如何以及在哪里找到给定模块?
当然,我认为它不是内核模块,因为我在内核模块列表中没有看到它++。那么,它们是 cmake 模块吗?我也不这么认为,因为cmake --help-module-list没有显示它++。
是否有一个特殊文件包含可以被 cmake 引用的模块列表?那么,是否应该it++在构建和安装步骤中在该文件中注册模块和其他库,以便 cmake 将其识别为模块?
我正在尝试做类似的事情
cmake -DUSE_FILES_FOR_INPUT=ON ..
Run Code Online (Sandbox Code Playgroud)
然后开始make编译我的文件-DUSE_FILES_FOR_INPUT=ON。但我没有得到它的=ON价值。似乎它应该写入 flags.make 文件,但它不是:
$ grep USE_FILES_FOR_INPUT source/CMakeFiles/myprogram.dir/flags.make
CXX_DEFINES = -DUSE_FILES_FOR_INPUT
Run Code Online (Sandbox Code Playgroud)
如果我手动更改该文件,-DUSE_FILES_FOR_INPUT=ON则一切正常。我怎样才能让 cmake 在 中添加值flags.make?
我需要做的事情的另一种方法:我正在使用的变量的类型为 BOOL,因此它足以获得
CXX_DEFINES = -DUSE_FILES_FOR_INPUT我什么时候做cmake -DUSE_FILES_FOR_INPUT=ON ..
,
CXX_DEFINES =什么时候做cmake -DUSE_FILES_FOR_INPUT=OFF ..
这可能吗?
我有以下情况:一个静态库MyStaticLib取决于 FFmpeg 项目(libavformat等)的几个库。
FFmpeg 库(不是由我)与“/SAFESEH:NO”选项链接,这意味着链接到它们的任何图像(通过它们的导入库)也必须与相同的选项链接(不这样做会使链接器因“LNK2026:模块对 SAFESEH 图像不安全”而中止)。
我已经尝试了所有我能想到的方法,但是我还没有找到一种方法可以将该选项附加到我的选项MyStaticLib中,从而使其传播给消费者。
这看起来很奇怪,因为 CMake 确实提供了将编译器选项传播给消费者的方法:target_compile_options()与该PUBLIC选项一起使用的命令正是这样做的。
链接器标志没有类似的功能吗?
在这里完成 CMake Noob。我正在尝试在 Clion IDE 中使用 glfw 库,即使经过 2 天的谷歌搜索,我也不明白我错过了什么/做错了什么。
以下是详细信息:
操作系统:Windows 8 Pro 64 位
IDE:克里昂
制作工具:CMake
编译器:MinGW v3.21
错误日志:
"C:\Program Files (x86)\JetBrains\CLion 1.2.3\bin\cmake\bin\cmake.exe"--build C:\Users\PranayKarani\.CLion12\system\cmake\generated\185d1d8\185d1d8\Debug --target openGL -- -j 4
[ 50%] Linking CXX executable openGL.exe
CMakeFiles\openGL.dir/objects.a(main.cpp.obj): In function `key_callback':
E:/Pranay/BotX games/C++ projects/openGL/main.cpp:15: undefined reference to `glfwSetWindowShouldClose'
CMakeFiles\openGL.dir/objects.a(main.cpp.obj): In function `main':
E:/Pranay/BotX games/C++ projects/openGL/main.cpp:22: undefined reference to `glfwSetErrorCallback'
E:/Pranay/BotX games/C++ projects/openGL/main.cpp:24: undefined reference to `glfwInit'
E:/Pranay/BotX games/C++ projects/openGL/main.cpp:27: undefined reference to `glfwCreateWindow'
E:/Pranay/BotX games/C++ projects/openGL/main.cpp:30: undefined reference to `glfwTerminate' …Run Code Online (Sandbox Code Playgroud) 有没有人遇到过这个错误?如果是这样,我该如何解决它或等效的方法是什么。
我正在运行 Ubuntu,代码创建了一个编译器定义列表,然后我只是遍历列表并添加每个定义。
set(COMPILER_DEF_LIST)
list(APPEND COMPILER_DEF_LIST_COMMON
NUMBER_FAMILY_RESERVED_FIXED_OIDS=5
CHILD_LIST_ELEMENTS_PER_BLOCK=10
...
FOREACH(compilerDefine ${COMPILER_DEF_LIST_COMMON})
add_definitions(-D${compilerDefine})
ENDFOREACH(compilerDefine)
Run Code Online (Sandbox Code Playgroud) 我正在尝试编译一个使用 xlib 和 cmake 的 c++ 程序。但是,我在 cmake 文件中包含和链接 xlib 库时遇到问题。
这是我得到的错误。
main.cpp:378: undefined reference to `XClearWindow'
collect2: error: ld returned 1 exit status
CMakeFiles/project1.dir/build.make:94: recipe for target 'project1' failed
make[2]: *** [project1] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/project1.dir/all' failed
make[1]: *** [CMakeFiles/project1.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
当我只使用命令行编译时,它工作得很好。
我使用这个命令(g++ main.cpp -L/usr/X11R6/lib -lX11)
这是我的 cmake 文件。
cmake_minimum_required(VERSION 3.6)
project(project1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
link_directories(/usr/X11R6/lib)
include_directories(/usr/share/X11)
set(SOURCE_FILES main.cpp)
add_executable(project1 ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud) 我一直在尝试创建一个 CMake 项目,然后使用 Visual Studio 2015 编译它。但是,当我生成项目文件时,不包括 boost。这是 CMake 在生成时的相关输出:
Boost 版本:1.62.0
找到以下 Boost 库:
system
thread
chrono
date_time
atomic
配置 done
生成 done
而且路径都是正确的。CMake 应该把包含目录放在哪里,放到 VC++ 目录中?构建系统哪里出错了?
实际的 CMakeLists.txt 如下:
#MultiTracker Application
cmake_minimum_required (VERSION 3.1)
project(MultiTracker)
#Additional CMake search modules
#Require C++11
set (CMAKE_CXX_STANDARD 11)
message(STATUS "Generating Makefile for MultiTracker")
file(GLOB SRC_FILES *.cpp)
#Find and link boost
SET(Boost_USE_STATIC_LIBS ON)
find_package(Boost REQUIRED system thread)
add_executable(MultiTracker ${SRC_FILES})
#Link internal libraries
#Link 3rd party libraries
target_link_libraries(MultiTracker ${Boost_LIBRARIES})
#The native OS thread library …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 VS 2010 和 CMake 在 Windows 10 - Home 上构建一个项目。我收到以下错误:
zutil.c
lib -nologo -out:zlib.lib adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj
rc /dWIN32 /r /fozlib1.res ./win32/zlib1.rc
'rc' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'rc' : return code '0x1'
Stop.
*.dll
The system cannot find the file specified.
0 file(s) copied.
Setting environment for using Microsoft Visual Studio 2010 …Run Code Online (Sandbox Code Playgroud) 我知道C ++有标准而不是版本,因此,它们的发布由规范管理(例如C99,C ++ 11等)
C ++编译器具有版本,并且每个版本都可以支持多种c ++标准。
关于上述内容,我找到了我的g ++版本编译器,即7.2.0
? bgarcial [~] ? g++ --version
g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
? bgarcial [~] ?
Run Code Online (Sandbox Code Playgroud)
我的g ++编译器具有以下目录,我正在使用本机Makefile以C ++语言进行构建
? bgarcial [include/c++/7] ? pwd
/usr/include/c++/7
? bgarcial [include/c++/7] ?
Run Code Online (Sandbox Code Playgroud)
如何确定我的g ++编译器支持哪些C ++标准?
所述克++文档包括以下信息:
GCC支持1998年发布的原始ISO C ++标准以及2011和2014年的修订版。如果未提供C ++语言方言选项,则默认值为-std = gnu ++ …
我已经检查了有关c ++ 17下文件系统链接的很多问题,但仍然无法成功建立链接。我的main.cpp文件如下。
#include <experimental/filesystem>
int main(int argc, char** argv)
{
std::string imageDirectory = "./image";;
std::vector<std::string> imagePath;
for (const auto& entry: std::filesystem::directory_iterator(imageDirectory))
{
imagePath.push_back(entry.path());
std::cout << entry.path() << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我CMakeLists.txt的如下。
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(visual_hull LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
add_library(dataIO
STATIC
dataIO.hpp
dataIO.cpp)
find_package(OpenCV REQUIRED core highgui imgproc)
target_link_libraries(dataIO ${OpenCV_LIBS})
add_executable(visual_hull main.cpp)
target_link_libraries(visual_hull PUBLIC dataIO
stdc++fs)
Run Code Online (Sandbox Code Playgroud)
错误如下。
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp: In function ‘int main(int, char**)’:
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp:15:31: error: ‘std::filesystem’ has not been declared
for (const auto& …Run Code Online (Sandbox Code Playgroud)