小编inf*_*ged的帖子

传递编译器选项cmake

我知道如何使用cmake命令传递编译器选项

set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")
Run Code Online (Sandbox Code Playgroud)

是否还有任何方法可以从命令行传递选项,这将覆盖CMakeList.txt选项,类似于 -

cmake -Wl,-rpath=/home/abcd/newlibs/ path/to/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

要么

cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

我的主要问题是我想知道如何追加标志以及如何从命令行覆盖现有的编译器标志.

cmake

29
推荐指数
4
解决办法
5万
查看次数

.gitignore 写入不区分大小写

例如,有什么方法可以使用正则表达式来执行不区分大小写的 .gitignore 吗?例如,inbox、Inbox、inBox 都应该被 .gitignore 中的一行忽略。?我正在编写一个脚本来生成 .gitignore 文件,因此不知道客户端可以使用哪种模式。

git

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

在cmake中设置PKG_CONFIG_PATH

我已在本地构建opencv并将其安装到本地目录(不是系统默认值).opencv.pc位于此本地文件夹中的文件夹pkgconfig下.如何从cmake中找到这个opencv.pc,因为我想链接并包含我程序中的opencv文件.

pkg_search_module(<PREFIX> [REQUIRED] [QUIET] <MODULE> [<MODULE>]*)
Run Code Online (Sandbox Code Playgroud)

没有任何参数,我可以强制命令使用特定路径(类似于HINTS与find_package())而不是系统默认值.

所以基本上.cmake工作:

find_package( OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake") 
Run Code Online (Sandbox Code Playgroud)

但我想使用位于"my/path/to/pkgconfig"下的opencv.pc(opencv.pc

pkg-config cmake

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

为什么复制构造函数有时会被明确地声明为非内联?

我无法理解有关内联和客户二进制兼容性的句子.有人可以解释一下吗?

C++ FAQ Cline,Lomow:

当编译器合成复制构造函数时,它会使它们内联.如果您的类暴露给您的客户(例如,如果您的客户#include您的头文件而不仅仅是使用从您的类构建的可执行文件),您的内联代码将被复制到您的客户可执行文件中.如果您的客户希望在头文件的版本之间保持二进制兼容性,则不得更改客户可见的内联函数.因此,您将需要一个明确的非内联版本的复制构造函数,该版本将由客户直接使用.

c++ copy-constructor

7
推荐指数
1
解决办法
240
查看次数

binutils支持的目标列表

我正在关注一个网站(http://wiki.osdev.org/GCC_Cross-Compiler),以了解如何交叉编译不同体系结构的代码.因此,第一步是为特定目标下载和编译Binutils.

该网站称使用i686-elf分配变量TARGET,因为binutils将能够以$ TARGET指定的格式处理代码.

export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是

我可以获得Binutils支持的目标列表吗?

如果变量TARGET可以包含任何东西,或者必须是Binutils支持的东西,即在编译binutils的源代码时是否会出错,如果TARGET是binutils不理解的东西?

binutils

6
推荐指数
1
解决办法
1626
查看次数

Git 子模块:无法将子模块更新到早期版本

我花了很多时间阅读和尝试 git 子模块。但我真的已经放弃了。

我的问题:

我正在将 git 存储库克隆为子模块。所以,我愿意

git submodule add -b master url localpath
Run Code Online (Sandbox Code Playgroud)

存储库开始下载,并在 .gitmodules 文件中创建相应的条目。git 子模块状态显示最新提交。

到目前为止,一切都很好。

开发过程中发现子模块中的HEAD commit有bug。因此,提交应该从 master 更改为某个提交 id。

因此,我将 .gitmodule 文件中的提交 ID ( 7 aplhanumeric ) 从branch = master 更改为

branch = <commitid> -> .gitmodule file
Run Code Online (Sandbox Code Playgroud)

并且做到了

git submodule update --remote
Run Code Online (Sandbox Code Playgroud)

错误是

致命:需要一次修改

无法在子模块路径中找到当前来源/修订版本

我也尝试过

 git submodule foreach git pull
Run Code Online (Sandbox Code Playgroud)

这样它就会拉取提交 ID,但它只是返回

输入子模块的名称

已经是最新的了。

谁能帮帮我吗?

PS:我已经阅读了很多教程和问答。因此,如果您想为了好玩而投反对票,请先指出答案,我将删除这篇文章。

git-submodules

5
推荐指数
1
解决办法
5702
查看次数

find_package(Boost) 返回空的 Boost_LIBRARIES

cmake 版本 3.8.2

我有一个奇怪的问题。当我这样做时find_package(Boost),Boost_LIBRARIES 是空的。但是当我这样做时find_package(Boost REQUIRED filesystem),Boost_LIBRARIES 变量会显示相应的库。

在这两种情况下,都找到了 Boost,因为它显示 Boost 版本是 1.64。

需要

-- Boost version: 1.64.0
-- Found the following Boost libraries:
--   filesystem
--   system
       Boost_INCLUDE_DIRS: /usr/local/include
       OpenCV_INCLUDE_DIRS: /usr/local/include;/usr/local/include/opencv
       Boost_LIBRARIES: /usr/local/lib/libboost_filesystem.so;/usr/local/lib/libboost_system.so
       OpenCV_LIBRARIES: opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab
Run Code Online (Sandbox Code Playgroud)

不需要

-- Boost version: 1.64.0
       Boost_INCLUDE_DIRS: /usr/local/include
       OpenCV_INCLUDE_DIRS: /usr/local/include;/usr/local/include/opencv
       Boost_LIBRARIES: 
       OpenCV_LIBRARIES: opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab
Run Code Online (Sandbox Code Playgroud)

boost库不应该只显示库而不是整个路径,就像opencv一样?

虽然我在同一个文件夹中有 program_options,但 Boost 找不到它并且 cmake 抛出错误。

  Could not find the following Boost libraries:

          boost_program_options
Run Code Online (Sandbox Code Playgroud)

请参阅 ll。

truncated ll output.....
-rw-r--r-- 1 root root 1558464 Aug 12 06:23 …
Run Code Online (Sandbox Code Playgroud)

boost

5
推荐指数
1
解决办法
1886
查看次数

是不是可以用干跑git stash pop?

git stash pop是否会盲目地覆盖本地更改或将它们与本地更改合并?

如果它合并,则可能存在合并冲突.有没有办法提前知道,使用--dry-run或其他方法会有合并冲突?

我可以找到--dry-run使用git fetch和git push但不能使用git stash pop.

编辑在几个答案后专门解释问题 -

我有一种情况,我有一个大约几天的git藏匿处.git stash完成之后,本地分支已被修改.这意味着,本地文件和存储文件之间存在差异(跟踪所有文件,并且在存储或本地分支中没有未跟踪的文件).

问题是,我想,一旦我执行git stash apply,在复杂的合并操作的情况下本地更改将处于冲突状态,因此无法撤消(因为没有撤消合并操作).git checkout不会有帮助,因为本地分支有本地更改.我的理解是否正确?

我想在做一个git stash apply之前做一个干运行之前看结果.所以,在我做任何事情并在之后哭泣之前,我想找到一个优雅的解决方案来解决这个问题.

git

4
推荐指数
1
解决办法
1075
查看次数

是否有可能在cpp中检查零下0?

这可能是一个愚蠢的问题,但我真的有一个0和0的问题.

我正在计算函数的斜率,并且根据向量(向右或向左),它是0或-0.

是否可以执行if条件并找出斜率是0还是-0?执行以下操作无效.

if ( slope == 0.0f )
std::cout << "direction vector towards right";
else if ( slope == -0.0f )
std::cout << "direction vector towards left"
Run Code Online (Sandbox Code Playgroud)

我粗略地没有提供工作源代码,因为我认为这与问题无关.对上述内容的简单答案将有所帮助.

c++

4
推荐指数
1
解决办法
147
查看次数

OpenCV 中的 saturate_cast 如何工作?

无法理解,表达式 Vxy 和 Vxy_nocast 的结果

uchar init_m0[] = {10,10,30};
cv::Mat m0(3,1,CV_8UC1,init_m0,sizeof(uchar));
uchar& Vxy = m0.at<uchar>(0);
uchar& Vxy_nocast = m0.at<uchar>(1);
std::cout << m0 << std::endl;
Vxy = cv::saturate_cast<uchar>((Vxy-128)*2 + 128);
Vxy_nocast = (Vxy_nocast-128)*2 + 128;
std::cout << m0 << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果

[ 10;
  10;
  30]
[  0;
 148;
  30]
Run Code Online (Sandbox Code Playgroud)

opencv

3
推荐指数
1
解决办法
5707
查看次数