如何制作可以在gcc(Linux)和VS(Windows)中编译的程序?

时间:2014-12-23 20:17:35

标签: c linux windows visual-studio gcc

我必须编写程序来更改文件夹中特定文件的扩展名。我已经完成了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中扫描文件夹并使用不同的功能更改扩展名,但是如何将所有这些组合成一个文件?

3 个答案:

答案 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