我刚刚开始使用CMake进行一些个人和学校项目,我被一个小问题困扰了.
假设我正在尝试在多个编译器下编译C++程序(在本例中为g ++,cl和bcc32).我为每个编译器设置了不同的命令行开关,我试图做的是基本上创建一个gnu/ms/borland目录并在那里创建CMake(通过输入目录并cmake -DCMAKE_CXX_COMPILER=g++
在gnu目录中执行..例如).
在顶级目录的CMakeLists.txt中,我尝试了以下方面的操作:
if(CMAKE_CXX_COMPILER STREQUAL g++)
set(CMAKE_CXX_FLAGS "-Wextra -Wall -ansi -pedantic")
Run Code Online (Sandbox Code Playgroud)
以及其他编译器的elsifs等等,但这似乎不能正常工作 - 它CXXFLAGS完全放弃了.如果我使文件完全无条件(即,假设g ++并使用g ++标志),该行就可以工作.
我在这里做错了什么,或者有更好的方法来处理这类问题?
这是一个奇怪的问题,一直困扰我.
该程序是用C89编写的,它一次将文件读入一个16字节的char*数组(使用fread和sizeof(char)的大小).该文件与"rb"标志一起打开.然后将该数组传递给一个函数,该函数基本上取16个十六进制值并将其粘贴到一个字符串中,每个值由一个空格分隔.
这就是奇怪的地方.该函数产生一个漂亮的十六进制转储,一次16个字节,用于我拥有的文本文件输入.但是如果我在一个小的位图图像上尝试它会搞砸 - 我最终会输出字符串中的输出,如ffffff88而不是88.
使用sprintf("%02x",input [i])将十六进制值放入输出字符串中; 在一个循环中.
为什么这对某些文件而不是其他文件正常工作?
我项目的目录结构基本如下:
根/ SRC
根/资产
根/库
我目前已经设置了CMake来编译源代码,编译库,然后通过从根目录调用make来链接它们.
然后我必须手动将可执行文件移动到原始资产目录中以使其运行,因为它是预期的位置(并且我们希望在资产中使用我们的目录结构进行测试,这与我们在完成时的预期接近).
那么,有没有办法告诉CMake自动将已编译的二进制文件粘贴在该目录中,以及复制资产?由于我们正在完成源代码构建,因此将可执行文件重新粘贴到原始项目源的资源文件夹中似乎很奇怪.
简而言之,有两个问题:有没有办法让CMake复制资产和代码,有没有办法让生成的可执行文件复制到构建树中的特定位置?
任何帮助将不胜感激---谢谢!
我有一个函数,我想对类型列表中的所有类型执行(目前由mpl列表表示---这是否是一种合理的方法来处理它?)
这里的关键是函数只关心类型,而不关心实际数据; 它调用该类型的静态函数来检索一些信息,然后将其推入哈希表以供以后参考.
但是,据我所知,mpl没有办法做到这一点 - 我能找到的最接近的是mpl for_each运算符,但它似乎想要用于每种类型的实际实例化,不是类型本身.
Loki库有一个"apply"函数,它或多或少是我正在寻找的东西 - 它通过将指向类型列表中的类型的指针作为参数来解决实例化问题,以帮助进行演绎,但是没有执行完全实例化.我应该在MPL中看到什么才能获得该功能?还是我错过了一些明显的东西?