我正在与另外两个基于FireBreath的开发人员合作开发一个项目.到目前为止,我已经能够在我的机器上完美地工作,但我们需要通过Mercurial协调我们的开发.所以我将文件推送到存储库,并认为一切都很顺利.
不幸的是,这不起作用.
.vcproj组成解决方案的各种文件都包含对本地文件系统的硬编码引用.这对我来说很好,因为我没有移动项目.但是,当您尝试在具有不同文件结构(不同驱动器号,不同文件夹位置等)的另一台计算机上构建解决方案时,一切都会中断.
我使用FireBreath的标准项目生成脚本(Python),然后使用Visual Studio CMake脚本(prep2008.cmd)生成解决方案文件.我可以做些什么来调整事情,以便其他开发人员可以使用相同的代码库?
嗨基本上我想从这里使用svm .它是用C语言编写的,并给出了如何在c ++中使用它的说明:
- 将"svm_learn.c","svm_common.c"和"svm_hideo.c"编译为
C代码.要调用svm_learn/8和classify_example/2(或classify_example_linear/2)的C++程序需要包含以下标头:
extern"C"{#include"svm_common.h"#include"svm_learn.h"}
将"svm_learn.o","svm_common.o"和"svm_hideo.o"链接到您的程序.
所以我编译了提到的文件并获得了所需的.o文件.比我添加:
SET( svm_lib_light_obj
E:\framework\svm_light\build\svm_learn.o
E:\framework\svm_light\build\svm_common.o
E:\framework\svm_light\build\svm_hideo.o
)
ADD_LIBRARY(
svm_lib_light
STATIC
EXCLUDE_FROM_ALL
${svm_lib_light_obj}
)
SET_SOURCE_FILES_PROPERTIES(
${svm_lib_light_obj}
PROPERTIES
EXTERNAL_OBJECT true # to say that "this is actually an object file, so it should not be compiled, only linked"
GENERATED true # to say that "it is OK that the obj-files do not exist before build time"
)
SET_TARGET_PROPERTIES(
svm_lib_light
PROPERTIES
LINKER_LANGUAGE C # Or else we get an error message, because cmake …Run Code Online (Sandbox Code Playgroud) 我正在使用boost.python构建应用程序.我想将每个cpp模块作为单个共享库.
我有一个cpp文件列表,如何在循环中使用名称取自cpp文件的不同子项目?
例如:
set(Script_srcs
Module1.cpp
Module2.cpp
Module3.cpp
)
some_cycle
add_library( {NAME} SHARED {PATH} )
Run Code Online (Sandbox Code Playgroud)
谢谢.
我好像有一个奇怪的问题:
我用C++(使用Eclipse CDT)编写了一个使用Mozilla的Netword安全服务的应用程序.这个应用程序运行正常,所以我想我可以将适当的类/标题/源移动到另一个项目(通常可以这样做吗?).原始项目使用位于/usr/include/nspr和的一些额外标题libnss3.
这个其他项目是使用CMake编译的.所以我告诉CMake添加/usr/include/nspr到include路径并使用libnss3.但是,当我尝试使用其他项目中的类时,编译时出现以下错误:
In file included from some-dir/src/import/FirefoxImporter.h:21:0,
from some-dir/src/import/Import_Firefox.h:26,
from some-dir/src/mainwindow.cpp:28:
/usr/include/nss/secmodt.h:85:25: error: expected unqualified-id before ‘;’ token
Run Code Online (Sandbox Code Playgroud)
第85行secmodt.h看起来如下:
PK11SlotInfo **slots; /* array of slot points attached to this mod*/
Run Code Online (Sandbox Code Playgroud)
并且PK11SlotInfo是typedef'd in secmodt.h:
typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */
Run Code Online (Sandbox Code Playgroud)
但是,我无法secmodti.h在我的系统上找到(但是,原始程序编译并执行得很好).
有没有人遇到类似的问题并解决了它们?
所以我正在尝试使用openCV videoWriter编写视频:
writer=cv.CreateVideoWriter(path+"test_output.avi",-1,fps,(W,H),1)
Run Code Online (Sandbox Code Playgroud)
因此,不是提供我提供的FOURCC -1,而是为了查看我可用的编解码器.结果是Microsoft RLE,Microsoft Video 1,Intel YUV和Uncompressed.
原因是当使用CMAKE为Visual Studio 10 x64配置openCV时,这就是我在视频i/o中所拥有的:视频I/O:DirectShow
有没有办法将其切换到FFMPEG?我知道ffmpeg dll存在于\ 3dparty\ffmpeg中.我找了Cmake FFMPEG标志,但没有找到任何标志.奇怪的是在视频部分下的opencv根目录中的CmakeLists.txt中:
if(UNIX AND NOT APPLE)
<FFMPEG stuff>
elseif(WIN32)
status(" Video I/O:" HAVE_VIDEOINPUT THEN DirectShow ELSE NO)
endif()
Run Code Online (Sandbox Code Playgroud)
所以在我看来opencv自动切换到DirectShow并且不允许使用FFMpeg.或者更确切地说,可以升级Driectshow以支持其他格式,如Divx或h264?有任何想法吗?
从QtCreator中的项目视图运行CMake("运行CMake"命令)时,会弹出CMake向导.这变得非常烦人,因为我是QtCreator新手,我不知道是否有任何补救措施.
期望的效果将是cmake的自动执行,而没有CMake向导的瘟疫.
我想在构建后运行 POST_BUILD 操作(但仅在调试配置中)。
在阅读了add_custom_command 文档和可能的解决方案后,我明白我可以将我的命令“包装”到$<CONFIG:Debug>生成器表达式中(以确保它在发布模式下为“空”)。
我尝试了以下方法:
cmake_minimum_required(VERSION 3.18)
project(post-build CXX)
file(WRITE main.cxx "int main() {}")
add_executable(foo main.cxx)
add_custom_command(
TARGET foo POST_BUILD
COMMAND $<$<CONFIG:Debug>:${CMAKE_COMMAND} -E echo "hi there from debug build">
)
Run Code Online (Sandbox Code Playgroud)
但这给了我 CMake 配置时警告和构建时的硬故障(使用 Ninja 生成器):
(...) && "$<1:C:\Program Files\CMake\bin\cmake.exe" -E echo "hi there from debug build" >""
[build] The system cannot find the path specified.
[build] ninja: build stopped: subcommand failed.
[build] Build finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
我尝试了许多可能的引号组合(包括转义引号):
COMMAND $<$<CONFIG:Debug>:"${CMAKE_COMMAND} …
当我构建一个使用 Assimp 的应用程序时,出现错误
C:\Users\nitin\AppData\Local\Temp\ccA4Vs3q.s: Assembler messages:
C:\Users\nitin\AppData\Local\Temp\ccA4Vs3q.s: Fatal error: can't write 117 bytes to section .text of CMakeFiles\assimp.dir\AssetLib\IFC\IFCReaderGen1_2x3.cpp.obj because: 'File too big'
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/as.exe: CMakeFiles\assimp.dir\AssetLib\IFC\IFCReaderGen1_2x3.cpp.obj: too many sections (46774)
C:\Users\nitin\AppData\Local\Temp\ccA4Vs3q.s: Fatal error: can't close CMakeFiles\assimp.dir\AssetLib\IFC\IFCReaderGen1_2x3.cpp.obj: File too big
Nade\vendor\assimp\code\CMakeFiles\assimp.dir\build.make:1965: recipe for target 'Nade/vendor/assimp/code/CMakeFiles/assimp.dir/AssetLib/IFC/IFCReaderGen1_2x3.cpp.obj' failed
Run Code Online (Sandbox Code Playgroud)
于是就上网搜索解决方案,找到了一个解决方案,说需要设置/bigobjflag。
我正在使用 Cmake 和 Mingw32-make。
但是当我添加这样的定义时
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} /bigobj)
Run Code Online (Sandbox Code Playgroud)
或者像这样
add_definitions(/bigobj)
Run Code Online (Sandbox Code Playgroud)
我收到错误
/bigobj: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何在解决“OBJ 文件太大”错误的同时解决此错误?
我开始使用 Apache arrow。我是通过vcpkg安装的。一切都很好,直到我将安装的 arrow 更新到 6.0.1。我使用 powershell 控制台中的以下命令安装了它:
vcpkg install arrow:x64-windows-static
Run Code Online (Sandbox Code Playgroud)
它已成功安装,我看到了成功消息(不知何故):
The package arrow provides CMake targets:
find_package(arrow CONFIG REQUIRED)
target_link_libraries(main PRIVATE re2::re2 arrow_static parquet_static arrow_bundled_dependencies)
Run Code Online (Sandbox Code Playgroud)
我有一个名为csv_column_test.cpp. 然后我注释掉了该文件的所有内容,除了这两行:
#define ARROW_STATIC
#include <arrow/api.h>
Run Code Online (Sandbox Code Playgroud)
并尝试编译它。我不断遇到这个错误:
error C2668: 'arrow::internal::launder': ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)
我想念什么?如何让事情再次运转?
谢谢。
这是完整的错误日志:
>------ Build All started: Project: StockPredII, Configuration: x64-Debug (default) ------
[1/2] Building CXX object splib\CMakeFiles\splib_test.dir\sparrow\csv_column_test.cpp.obj
FAILED: splib/CMakeFiles/splib_test.dir/sparrow/csv_column_test.cpp.obj
C:\PROGRA~2\MICROS~4\2019\PROFES~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\cl.exe /nologo /TP -DARROW_DEPENDENCY_SOURCE=VCPKG -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING -I\Catch2\include -I..\..\..\splib -IE:\sandbox\vcpkg\installed\x64-windows-static\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MTd /Zi /Ob0 …Run Code Online (Sandbox Code Playgroud) 我有以下最小的非工作示例 CMakeLists.txt:
project(MinimalWorkingExample)
if(NOT WIN32 AND WIN32)
message("If branch!!")
else()
message("Else branch!!")
endif()
if(${ENABLE_COVERAGE})
message("If branch 2!!")
else()
message("Else branch 2!!")
endif()
if(${ENABLE_COVERAGE} AND ${ENABLE_COVERAGE})
message("If branch 3!!")
else()
message("Else branch 3!!")
endif()
if(NOT WIN32 AND NOT WIN32)
message("If branch 4!!")
else()
message("Else branch 4!!")
endif()
if(NOT WIN32)
if(${ENABLE_COVERAGE})
message("If-If branch!!")
else()
message("If-Else branch!!")
endif()
else()
if(${ENABLE_COVERAGE})
message("Else-If branch!!")
else()
message("Else-Else branch!!")
endif()
endif()
if(NOT WIN32 AND ${ENABLE_COVERAGE})
message("Last branch")
endif()
Run Code Online (Sandbox Code Playgroud)
在 Windows 下使用 CMake 3.24.2 会产生以下输出(除了通常的编译器标识等,其中没有警告或错误):
Else branch!!
Else …Run Code Online (Sandbox Code Playgroud) cmake ×10
c++ ×6
apache-arrow ×1
assimp ×1
directshow ×1
ffmpeg ×1
firebreath ×1
linker ×1
loops ×1
mercurial ×1
opencv ×1
qt-creator ×1
vcpkg ×1
vcproj ×1