我正在尝试使用应该在Windows环境中运行的Makefile。 (这是SVM火炬)。源网站告诉“您应该只需要更改以下几行,具体取决于您的特定平台”(逐字副本)
作为 Vis 的新手。 Studio C++ 我不知道我应该写什么来代替这段代码中的这些 g++:
# C-compiler
CC=g++
#CC=CC
# C-Compiler flags
CFLAGS=-Wall -W -O9 -funroll-all-loops -finline -ffast-math
#CFLAGS=-native -fast -xO5
# linker
LD=g++
#LD=CC
# linker flags
LFLAGS=-Wall -W -O9 -funroll-all-loops -finline -ffast-math
#LFLAGS=-native -fast -xO5
# libraries LIBS=-lm
我使用的是 Windows 7 和 Visual Studio 2010 Professional。
我知道我需要告诉使用哪个编译器,但还没有找到正确的word来替换g++
仅供参考: 1.我正在输入:
nmake -f Makefile
正如 Windows 中所预期的那样,我收到以下错误:
"'g++' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'g++' : return code '0x1'
Stop."
此
Makefile
不适合与“本机”Windows 工具链一起使用。您不能使用 nmake
或 Windows 版本的 make
。
你可以通过查看
Makefile
看到这一点,我复制了一个片段:
37 clean:
38 rm -f *.o
39 rm -f SVMTorch
40 rm -f SVMTest
41 rm -f convert
rm
不是 Windows 中的命令,因此即使您使用 Windows 版本的 make
和常规命令提示符,也会失败。
此外,该代码还包含 *nix 特定的代码。例如在
general.cc
:
33 long getRuntime(void)
34 {
35 struct tms buffer;
36 times(&buffer);
37 return((long)(buffer.tms_utime+buffer.tms_stime));
38 }
据我所知,这种类型
struct tms
和函数times()
在Windows上不可用,因此如果您使用MSVC编译器(cl
)将无法编译。
mingw
的东西,它提供了一个类似 Unix 的 shell 和一个 GNU 编译器套件,才能以常规方式构建它。
但是,
Makefile
非常简单,所以我会尝试创建一个 MSVC 项目,将所有源文件添加到其中,看看会发生什么。由于 Makefile
包含三个可执行目标,因此您必须(至少)创建三个项目才能完成这项工作,但您可以从仅构建一个可执行文件开始,看看您能走多远。不过,您必须解决 *nix 特定的代码片段。
适用于 Windows 上的 make
使用 CXX 和 CXXFLAGS 就可以了。它将使用 cl.exe 代替 g++
其他需要注意的是在文件路径中使用 / 并在使用 makefile 时使用 - 作为 cl.exe 选项。