标签: cmake

使用 Qt 和 cmake 构建非控制台 Windows 应用程序

我无法找到在 Windows 下使用 cmake、Qt5 和 Visual C++ 构建非控制台应用程序的最新方法。看起来在 Qt4 时代,将 QT_USE_QTMAIN 设置为 true 就足够了。现在据说链接 Qt5::WinMain 就足够了。但是,这些都不适合我 - 我的应用程序继续打开控制台窗口。我在 cmake 或 Qt 文档中也找不到任何内容。

让应用程序停止打开控制台窗口的已记录/经过验证的方法是什么?

qt cmake visual-c++

0
推荐指数
1
解决办法
1853
查看次数

无法将 mbedtls 添加到项目中

尝试将 mbedtls 添加到我的项目中,我使用 apt-get install 来安装 libmbedtls-dev 这些导入是否不正确?适用于 Ubuntu 16.04。在 18.04 上运行良好

file (GLOB C_FILES *.c)
file (GLOB H_FILES "../../../include/thrift/ssl/*.h")
add_library (thrift_tcp_ssl ${THRIFT_LIB_TYPE} ${C_FILES} ${H_FILES})
target_link_libraries (thrift_tcp_ssl PRIVATE thrift -lmbedtls -lmbedx509 -lmbedcrypto)
target_include_directories (thrift_tcp_ssl PRIVATE ../../../include)
install (TARGETS thrift_tcp_ssl LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

unbuntu 16 出现此错误

/usr/bin/ld: 找不到 -lmbedtls

c cmake mbedtls

0
推荐指数
1
解决办法
2436
查看次数

target_link_libraries 内的生成器表达式

我接到一个特别的电话,要求target_link_libraries我开始工作。

target_link_libraries(
  Array
  $<$<CXX_COMPILER_ID:Clang>: c++abi>
  $<$<CXX_COMPILER_ID:GNU>: c++ c++abi c gcc_s gcc>
)
Run Code Online (Sandbox Code Playgroud)

它输出如下构建命令:

clang++ CMakeFiles/Array.dir/driver.cpp.o CMakeFiles/Array.dir/Array.cpp.o  -o Array $<1: -lc++abi> $<0: -lc++ -lc++abi -lc -lgcc_s -lgcc>
Run Code Online (Sandbox Code Playgroud)

Am I writing the generator expressions correctly or is the call to target_link_libraries wrong?

cmake

0
推荐指数
1
解决办法
1320
查看次数

在linux中使用cmake获取“无法找到cmake模块文件:CMakeDetermineVersionCompiler.cmake”

通过网站脚本安装 cmake 后,我收到Could not find cmake module file: CMakeDetermineVersionCompiler.cmake 。我缺少什么以及在哪里/运行什么命令来解决此问题。

安装命令:

sudo ./cmake.sh --prefix=/usr/local/ --exclude-subdir
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)

project(Hello Version 1.0)

add_executable(${PROJECT_NAME} ../src/main.cpp)
Run Code Online (Sandbox Code Playgroud)

版本:cmake版本3.16.6(我也尝试了最新版本3.17.2)

操作系统:Linux Mint 19 Cinnamon

linux cmake cmake-modules

0
推荐指数
1
解决办法
1万
查看次数

Android Studio 使用 Gcc 编译,如何将其更改为 G++?(使用CMake)

我有一个 Android studio 项目,它使用带有 JNI 的 Native C++ 代码,但是当我尝试构建我的项目时,它会抛出error: undefined reference to 'std::basic_ostream<char... 错误。

我正在使用 ubuntu,我相信问题是由使用 gcc 编译器的 IDE 引起的,并尝试将其编译为 C 代码。当我尝试通过gcc -o foo foo.cpp在终端中运行来运行简单的 hello world 程序时,它给出了相同的错误。当我将 gcc 更改为 g++ 时,一切正常。

但是如何更改 IDE 中的编译器呢?我对使用CMake有点陌生,我想我需要使用cmake的enable_language函数,但即使我将enable_language(CPP)行添加到我的CMakeLists.txt中,它也会给出相同的错误。

这是我的 CMakeLists.txt :

cmake_minimum_required(VERSION 3.4.1)
include_directories("/usr/include/x86_64-linux-gnu/c++/9")
include_directories("/usr/include/c++/9")
include_directories("/usr/include/x86_64-linux-gnu")
include_directories("/usr/include")
file(GLOB srcs *.cpp *.c)
file(GLOB hdrs *.hpp *.h)



include_directories(${OpenCV_DIR}/jni/include)
include_directories(${TESSERACT_INCLUDE_DIRS})
include_directories(${LEPTONICA_INCLUDE_DIRS})
add_library( lib_opencv SHARED IMPORTED )
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${OpenCV_DIR}/libs/${ANDROID_ABI}/libopencv_java4.so)

add_library( 
             native-lib

             
             SHARED

             #
             native-lib.cpp )



find_library( 
              log-lib

              
              log )


target_link_libraries( 
                    native-lib
                    lib_opencv …
Run Code Online (Sandbox Code Playgroud)

c++ cmake android-ndk

0
推荐指数
1
解决办法
1487
查看次数

尽管在 CMake 中指定了库,但未定义的引用错误(与 libtorch 链接的问题(C++11 ABI?)

我正在尝试从我制作的库中创建一个测试可执行文件。我们将它们命名为 lib1 和 lib2。lib1 的构建和测试都很好。lib2 的构建也没有任何问题。但是,每当我尝试将 lib2 与其测试可执行文件(即使用 lib2 的示例程序)链接时,我都会收到以下错误:

usr/bin/ld: CMakeFiles/Lib2_Test.dir/Lib2_Test.cpp.o: in function `main':
Lib2_Test.cpp:(.text+0xf3): undefined reference to `Lib2::Lib2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)'
/usr/bin/ld: Lib2_Test.cpp:(.text+0x3f5): undefined reference to `Lib2::Evaluate(bool&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, float&, cv::Mat&, cv::Mat&, bool)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Lib2_Test.dir/build.make:130: Lib2_Test] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/Lib2_Test.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
Run Code Online (Sandbox Code Playgroud)

readelf -d我尝试使用命令查看标题ldd,这两个库似乎都有所有必要的引用。但是 lib1 没有任何问题,而 lib2 在链接到使用它的可执行文件时会生成未引用的相关错误。

下面是我为它们制作的 cmakeList,后来我还包含了readelf …

c++ linux cmake torch libtorch

0
推荐指数
1
解决办法
1767
查看次数

使用 C++ 和 CUDA 在 GPU 上读取视频

大家好,感谢您的回答

首先,正如@zkoza@talonmies指出的那样,Jetson AGX Xavier 与 ARCH 7.2 兼容,而不是 Jetson Nano 案例中使用的 ARCH 5.3。

对于@Yunus Temurlenk =>我的代码中的fname只是myvideo.MOV,因为我在电影的同一剧目中执行我的代码,我还尝试使用从互联网样本中获取的.mp4文件,导致相同的错误。是的,正如您所指出的,在 cmake 命令之后我的 NVCUVID 未打开,正如您在我的原始帖子中看到的,与 CUDA 对应的行是

 NVIDIA CUDA: YES (ver 10.2, CUFFT CUBLAS FAST_MATH)
Run Code Online (Sandbox Code Playgroud)

并不是

 NVIDIA CUDA: YES (ver 10.2, CUFFT NVCUVID CUBLAS FAST_MATH)
Run Code Online (Sandbox Code Playgroud)

我不知道缺少哪些依赖项,但我还在这里看到 NVCUVID 已被弃用: https: //docs.nvidia.com/cuda/video-decoder/index.html

cuda 第 6 步中的示例工作正常:) 我目前正在使用 cuda 10.2 制作 opencv 4.3.0,如果这解决了我的问题,我将更新我的答案。

编辑:不幸的是,在 Ubuntu 18.04 上使用 openCV 4.3.0 和 Cuda 10.2 时,问题完全相同,但我想补充一点,我使用此命令进行编译:

g++ video_reader.cpp -o vr.exe `pkg-config --cflags --libs opencv4`
Run Code Online (Sandbox Code Playgroud)

因为 …

c++ opencv cuda nvidia cmake

0
推荐指数
1
解决办法
3538
查看次数

如何将变量传递给 cmake 脚本

我正在尝试将变量传递给 cmake 脚本,但显然我没有正确执行。我正在尝试按照教程构建一个计时项目。我正在关注的教程在这里:

https://api.projectchrono.org/tutorial_install_project.html

CMakeLists.txt 修改如下:

#--------------------------------------------------------------
# 
# Example of CMake configuration file to build an external 
# project depending on Chrono and on optional Chrono modules.
# 
# This minimal sample project can be used as a template for a
# user project.  Modify sections 1, 2, and 3 below as appropriate.
# 
#--------------------------------------------------------------
 

cmake_minimum_required(VERSION 2.8)

#--------------------------------------------------------------
# === 1 === 
# Modify the project name if you want: 
#--------------------------------------------------------------

project(my_project)

#--------------------------------------------------------------
# === 2 ===
# Find …
Run Code Online (Sandbox Code Playgroud)

c++ configuration cmake

0
推荐指数
1
解决办法
1460
查看次数

使用 CMake 编译带有调试符号的单个文件

我有一个项目,我正在使用 CMake 调试模式使用 gcc 进行编译,以便能够调试一个函数。然而,在我达到这个功能之前,需要花费很多时间。有没有办法只编译一个文件,-g -O0同时编译其余文件-O2

gcc cmake

0
推荐指数
1
解决办法
569
查看次数

为什么工具链文件在 CMake 中执行了几次?

在尝试使用 SDCC 编译器创建交叉编译 CMake 工具链模板时,我遇到了一个非常奇怪的问题。

如此链接所述,如果toolchain.cmake文件定义了 a ,CMake 将在目录下CMAKE_SYSTEM_NAME查找具有 的文件。这个文件应该定义特定于平台的选项。就我而言,我用它来查找${CMAKE_SYSTEM_NAME}.cmakeModule/Platformsdcc编译器并设置一些编译器标志。

这对我来说效果很好。使用cmake -DCMAKE_MODULE_PATH="${PATH_TO_MY_MODULES}" -DCMAKE_TOOLCHAIN_FILE="${PATH_TO_MY_TOOLCHAIN}" -DSDCC_SYSROOT="SOME_VALUE",CMake 找到所有正确的工具链和平台文件。

看起来工具链和平台文件在配置过程中被执行了几次(不确定这是否是正确的术语)。在前几次中,我在 CMake 命令中传递的变量具有预期的SDCC_SYSROOT值。SOME_VALUE然而,相同的变量SDCC_SYSROOT似乎在上次执行这些工具链/平台文件时丢失了值。所以他们是空的。这会导致我的脚本生成致命错误。

toolchain.cmake有以下内容:

set(CMAKE_SYSTEM_NAME SDCC_PIC_16F877A)

# Finding resource settings
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# Set default MCU family and model
if (NOT MICROCHIP_FAMILY)
  set(MICROCHIP_FAMILY "pic16")
endif()

if (MICROCHIP_MODEL STREQUAL "pic16")
  set(MICROCHIP_MODEL "16f877a")
endif()


# Need a better way to detect …
Run Code Online (Sandbox Code Playgroud)

cmake toolchain sdcc

0
推荐指数
1
解决办法
2581
查看次数