除了 gcc 和 g++ 编译器之外,我还在 Windows 上安装了 CMake,我将变量添加到路径中,但仍然出现以下错误,您可以帮忙吗?
-- Building for: NMake Makefiles
CMake Error at CMakeLists.txt:6 (project):
Running
'nmake' '-?'
failed with:
The system cannot find the file specified
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "C:/Users/DEANHOS/Desktop/peer/cmake tutorial/codeAndTech/sample/CMakeFiles/CMakeOutput.log".
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 CLion(最新版本 - 2019.3)来处理我的源存储库,该存储库已经使用了 CMake(即有一个CMakeLists.txt)。现在,该软件包有一些关于构建哪些目标的选项;默认情况下,它只构建一些测试,但如果您将选项设置为ON,则会编译并构建一堆测试。
不幸的是,我不太明白 CLion 在哪里可以让您为其生成的构建子目录设置 CMake 选项值。它真的强迫你使用默认值吗?还是我在主用户界面或首选项中遗漏了某些内容?
我的目标是配置一个支持 cuda、tesseract 和 QT 的 OpenCV 4.5.1-dev 版本而没有任何 cmake 错误..
当我按下 cmake gui 上的配置按钮时,出现以下错误:
CMake Error at modules/dnn/CMakeLists.txt:39 (message):
DNN: CUDA backend requires cuDNN. Please resolve dependency or disable
OPENCV_DNN_CUDA=OFF
Run Code Online (Sandbox Code Playgroud)
这是我收到的完整 cmake 日志消息:
Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19042.
Detected processor: AMD64
libjpeg-turbo: VERSION = 2.0.6, BUILD = opencv-4.5.1-dev-libjpeg-turbo
Could NOT find OpenJPEG (minimal suitable version: 2.0, recommended version >= 2.3.1). OpenJPEG will be built from sources
OpenJPEG: VERSION = 2.3.1, BUILD = opencv-4.5.1-dev-openjp2-2.3.1
OpenJPEG …Run Code Online (Sandbox Code Playgroud) 例如,在 CMakeLists.txt 中,我可以定义路径:
\nadd_definitions(-DMY_PATH="/my/path")\nRun Code Online (Sandbox Code Playgroud)\n在 C++ 代码中,我可以通过以下方式访问变量
\nstd::string my_path = MY_PATH\nRun Code Online (Sandbox Code Playgroud)\n这很好用。现在,如果我在 CMakeLists.txt 中定义一个变量,如下所示:
\nadd_definitions(-DMY_PATH=${CMAKE_BINARY_DIR})\nRun Code Online (Sandbox Code Playgroud)\n然后,我收到以下错误:
\nerror: expected primary-expression before \xe2\x80\x98/\xe2\x80\x99 token\n/home/user/development/include/helper.hpp:33:32: note: in expansion of macro \xe2\x80\x98MY_PATH\xe2\x80\x99\n const std::string path = MY_PATH;\n ^~~~~~~\n<command-line>:0:10: error: \xe2\x80\x98home\xe2\x80\x99 was not declared in this scope\n/home/user/development/include/helper.hpp:33:32: note: in expansion of macro \xe2\x80\x98MY_PATH\xe2\x80\x99\n const std::string path = MY_PATH;\nRun Code Online (Sandbox Code Playgroud)\n那么,为什么会有所不同呢?如何将 cmake 变量转换为 C++ 代码中的字符串?
\n我正在使用 CMake 定义 C++ 可执行文件的编译。目标是使用 2 个第三方库:Open3D 和 OpenCV。我可以使用 包含两者之一target_link_libraries,但包含这两个结果会导致找不到 OpenCV 函数。
这是我目前的CMakeLists.txt
minimum_required(VERSION 3.20)
project(ORB_SLAM)
find_package(Open3D REQUIRED)
find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 20)
add_executable(ORB_SLAM src/main.cpp)
#target_link_libraries(ORB_SLAM ${Open3D_LIBRARIES})
target_link_libraries(ORB_SLAM ${OpenCV_LIBS})
# When printed, ${Open3D_LIBRARIES} = Open3D::Open3D
# ${OpenCV_LIBS} = opencv_calib3d;opencv_core;...many more..;opencv_xphoto
Run Code Online (Sandbox Code Playgroud)
有了这个CMakeList.txt,我就可以成功使用OpenCV的功能了。通过使用注释掉的 Open3D target_link_libraries,我可以成功使用 Open3D 。当取消注释两者时,无论和target_link_libraries的顺序如何,它都无法找到 OpenCV 功能。如果我将两者都包含在一个. CMake 3.16.3 和 3.21.3 也会出现同样的错误。find_packagetarget_link_librariestarget_link_libraries(ORB_SLAM ${OpenCV_LIBS} ${Open3D_LIBRARIES})
错误如下:
/usr/bin/ld: CMakeFiles/ORB_SLAM.dir/src/main.cpp.o: in function `main':
/home/m/CLionProjects/ORB_SLAM/src/main.cpp:20: undefined reference to `cv::VideoCapture::VideoCapture(std::string const&, int)'
Run Code Online (Sandbox Code Playgroud)
对于代码
#include <opencv2/opencv.hpp> …Run Code Online (Sandbox Code Playgroud) 我是 ROS 新手,
当我将 rospy 导入脚本文件 example.py 并运行它时遇到问题:它说:
Traceback (most recent call last):
File "/home/nagarjunv/hk_ws/src/rvo/src/example.py", line 4, in <module>
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
import roslib
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest # noqa: F401
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ModuleNotFoundError: No module named 'rospkg'
Run Code Online (Sandbox Code Playgroud)
我将以下内容导入到我的脚本文件中:第 4 行是 rospy
#!/usr/bin/env python3
import sys
import rospy
Run Code Online (Sandbox Code Playgroud)
这是我的 CmakeList: …
我想包含一些仅适用于 Windows 操作系统的 *.c 和 *.h 文件。但我找不到在不创建另一个目标的情况下如何做到这一点的方法,这会导致错误
我想做这样的事情:
add_executable(${TARGET}
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
if (WIN32)
test.c
test.h
endif()
)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点吗?
我正在尝试通过阅读 LLVM 文档来创建一种新的编程语言。其中一个文档是关于“Kaleidscope”的,这是一种玩具编程语言。(教程在这里: https: //releases.llvm.org/9.0.0/docs/tutorial/LangImpl01.html)。
教程中的所有代码都写在一个文件中,可以通过以下命令进行编译:
clang++ -g -O3 toy.cpp -I/usr/lib/llvm-10/include -std=c++14 \
-fno-exceptions -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \
-L/usr/lib/llvm-10/lib \
-rdynamic \
-lLLVM-10 -o toy
Run Code Online (Sandbox Code Playgroud)
但是,我想通过 CMake 管理我的项目。CMakeLists.txt除了选项“-rdynamic”之外,我已将上面的大部分命令翻译成一个文件(随后附加)。有谁知道如何将此选项添加到我的CMakeLists.txt?提前致谢!
SET(CMAKE_CXX_COMPILER "/usr/bin/clang++")
INCLUDE_DIRECTORIES("/usr/lib/llvm-10/include")
LINK_DIRECTORIES("/usr/lib/llvm-10/lib")
SET(_GNU_SOURCE 1)
SET(__STDC_CONSTANT_MACROS 1)
SET(__STDC_FORMAT_MACROS 1)
SET(__STDC_LIMIT_MACROS 1)
# Project configuration
# omit something unrelated
FIND_PACKAGE(LLVM REQUIRED CONFIG)
TARGET_LINK_LIBRARIES(compiler LLVM-10)
Run Code Online (Sandbox Code Playgroud) 我是 CMake 的新手,我想知道是否有可能target_sources()根据变量排除某些来源。
假设我在下面有这个
target_sources(myTarget
PUBLIC
PRIVATE
myDir1/src/a.c
myDir2/src/b.c
myDir3/src/c.c
INTERFACE
)
target_include_directories(myTarget
PUBLIC
PRIVATE
myDir1/inc
myDir2/inc
myDir3/inc
INTERFACE
)
Run Code Online (Sandbox Code Playgroud)
我想根据名为 ie 的标志从 myDir3 中排除/包含源/目录myFlag。我怎样才能做到这一点?
target_sources(myTarget
PUBLIC
PRIVATE
myDir1/src/a.c
myDir2/src/b.c
if(DEFINED myFlag)
myDir3/src/c.c
endif()
INTERFACE
)
target_include_directories(myTarget
PUBLIC
PRIVATE
myDir1/inc
myDir2/inc
if(DEFINED myFlag)
myDir3/inc
endif()
INTERFACE
)
Run Code Online (Sandbox Code Playgroud)