这是我第一次尝试用C++编写任何稍微复杂的东西,我正在尝试构建一个共享库,我可以从Objective-C和.NET应用程序中与之交互(好的,这部分将在稍后...)
我的密码是-
#ifdef TARGET_OS_MAC
// Mac Includes Here
#endif
#ifdef __linux__
// Linux Includes Here
#error Can't be compiled on Linux yet
#endif
#ifdef _WIN32 || _WIN64
// Windows Includes Here
#error Can
我正在寻找一种在C++中为多个平台组织头文件的模式。
我有一个可以在Linux和Win32下编译的包装器.h文件。
这是我能做的最好的事了吗?
// defs.h
#if defined(WIN32)
#include <win32/defs.h>
#elif defined(LINUX)
#include <linux/defs.h>
#else
#error "Unable to determine OS or current OS is not supported!"
#endif
// Common stuff below here...
根据64位系统中的cpp参考:
LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit)
Win64 API
LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit)
Unix and Unix-like systems (Linux, Mac OS X)
那么,如何考虑为Linux和Windows编写的代码的长数据类型呢?
我有一个共享文件夹,这是我的Rails应用程序。我在RubyMine中用Win7编辑代码,并在linux中运行服务器。这个装置很好用。我总是在Win中完成所有提交/分支/等操作,通常来自RubyMine或GitBash。
然而,今天我在GitBash中做了Win7,在linux中也做了。结果大不相同。
# git bash win 7
$ git status
# On branch master
nothing to commit (working directory clean)
# linux
~/app> git status
# On branch master
# Cha
我的.gitignore似乎不像预期的那样正确。
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: win_2016_datacentre_vm/.terraform/plugins/linux_amd64/lock.json
new file: win_20
我使用下面的Linux和Windows perl库:
Linux:
use Fcntl;
use File::FcntlLock
Windows:
use Win32::API;
use Win32API::File qw(:Func :Misc :FILE_:FILE_FLAG_ :FILE_SHARE_ :FILE_ATTRIBUTE_ :GENERIC_ )
因此,在我用来运行脚本的主机(Linux或Windows)的基础上,我加载了这个包-
my $linux_packages = "use Fcntl; use File::FcntlLock; use File::Copy