我必须编写程序来更改文件夹中特定文件的扩展名。我已经完成了Linux版本(用gcc编译),现在我想知道如何编辑它以便能够在Windows中编译它(在VS中)并使其在那里工作。它必须是一个程序(我不能做2个版本,一个用于gcc,一个用于VS)。
我必须使用的语言是C.
我在那里使用的是什么:
pthread.h library (multi-threading)
dirent.h library (opendir, readdir, rewinddir)
unistd.h library (chdir, usleep)
那么我应该怎么做才能在两个操作系统上使用相同的源代码在windows和linux中编译和工作?我知道我必须在Windows中扫描文件夹并使用不同的功能更改扩展名,但是如何将所有这些组合成一个文件?
答案 0 :(得分:2)
对于堆栈溢出来说,这可能是一个太宽泛的问题。有许多可能的方法来解决这个问题。你需要使用VS吗?一种方法是在Windows上构建和安装gcc,如here所述。
另一种可能性是将大部分代码分成多个c文件,并简单地#ifdef很多东西。
您可以在此answer中找到更常用的有用信息。
答案 1 :(得分:1)
一般问题是Windows不符合POSIX。如果您不想触摸您的代码(即,在Win上与其对应方重写POSIX调用并使用预处理器的条件指令调整代码),您可以尝试添加Cygwin& #39; s cygwin1.dll
,所以用它重新映射POSIX调用。但是,您可能对Cygwin的许可限制不满意。
有关详情,请参阅https://www.cygwin.com/faq.html#faq.programming.msvs-mingw。
答案 2 :(得分:1)
如果必须向两个编译器提供相同的源代码树,请采用以下方法:
#ifdef linux
#include <scanner_linux.c>
#else
#include <scanner_win.c>
#endif
这样,您可以拥有两个不同的源文件,但是您可以使用相同的输入文件显示两个编译器。
当我必须进行这种Linux / Windows编译时,我通常使用cygwin。它安装简单,没有Cygwin的Windows用户只需要cygwin.dll
。