我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?
就像是:
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error "OS not supported!"
#endif
Run Code Online (Sandbox Code Playgroud)
问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.
我正在寻找一种方法可靠地确定C++代码是在32位还是64位编译.我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否可以想到这可能会失败的情况,或者是否有更好的方法来做到这一点.请注意,我们正在尝试在跨平台的多编译器环境中执行此操作.
#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif
#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif
Run Code Online (Sandbox Code Playgroud)
谢谢.
在编译C或C++代码时,找出CPU架构最可靠的方法是什么?据我所知,不同的编译器有自己的一套非标准预处理器定义(_M_X86在MSVS中__i386__,__arm__在GCC 中等).
有没有一种标准的方法来检测我正在构建的架构?如果没有,是否有各种编译器的这种定义的综合列表的来源,例如包含所有样板#ifdef的标题?
每条信息都有+1,有助于完成整个画面.你不需要知道整个答案.我会同样欣赏这个拼图的各个部分.谢谢.
我即将尝试我的第一次交叉编译.我搜索了SO和网络,发现了许多信息,但我并不总是知道如何将这些部分放在一起,因为仍然有一些缺失的部分.
我的主持人:linux Kubuntu amd64.
目标:linux kubuntu x86(32位)(应该很简单,不是吗?)
工具:g ++和cmake.
如何使用gcc/cmake在64位Linux机器上编译32位二进制文件
提到导出CFLAGS = -m32.这是一件作品.
跨平台:选择使用32/64位的
数据类型提及数据类型.我可能必须在我的代码中注意这一点.
#ifdef用于32位平台
#ifdef用于32位平台
链接到以下内容,虽然我还不太清楚如何使用它:http:
//predef.sourceforge.net/prearch.html
http://ww.ubuntuforums.org/showthread.php?t=1377396
我做了:sudo apt-get install g ++ - multilib
理想情况下,当我'make'(使用cmake)时,它应该吐出amd64二进制文件和x86二进制文件.
我的CMakeLists.txt的一部分如下所示:
add_definitions(-Wall -pthread)
add_executable (../run.amd64 user.cpp time.cpp init.cpp utils.cpp main.cpp)
target_link_libraries(../run.amd64 cppcms dbixx config++ ctemplate)
Run Code Online (Sandbox Code Playgroud)
如何引入标志-m32来创建第二个可执行文件?
我是否只想制作一个可执行文件(例如,用于测试和调试),如何告诉cmake创建一个或两个二进制文件?
此外,您可以看到我使用了一些第三方库,其中一些我必须自己编译.这是否意味着我还需要为目标主机编译每个二进制文件?有些人使用cmake,有些人使用:./ configure; 使;
如何为目标主机编译这些库(要使用的标志等)?
注意:动态链接库已经编译并安装在目标计算机上,所以也许我不需要担心这一步......我不确定:这是我遗失的部分之一......
我需要的是一种教程,或至少一些缺失的部分.我将更新这篇文章,详细介绍我取得的成就以及如何实现.
谢谢.
PS
搜索更多,我发现了这个:
http://www.mail-archive.com/cmake@cmake.org/msg26265.html
"原始设计似乎不是为了windows-linux或linux-windows而设计的交叉编译."
cmake没有测试linux amd64到linux x86.
http://www.cmake.org/Wiki/CMake_Cross_Compiling#FAQ.2FPotential_Problems
"在混合的32/64位Linux安装中,交叉编译不能仅用于构建32/64位."
??
我需要设置 #ifdef - 检查条件编译.我想自动化该过程但不能指定目标OS /机器.有没有一种方法可以解析预编译器是在32位还是64位上运行?
(解释)我需要定义一个64位大小的类型.在64位操作系统上它是一个很长的,在大多数情况下它是一个很长的.
我找到了这个答案 - 这是正确的方法吗?
c++ ×4
32bit-64bit ×2
linux ×2
c ×1
cmake ×1
compilation ×1
compile-time ×1
detection ×1
g++ ×1
ifdefine ×1
windows ×1