Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在makefile中添加特定于平台的标志_Linux_Windows_Makefile_Mingw_Autotools - Fatal编程技术网

Linux 在makefile中添加特定于平台的标志

Linux 在makefile中添加特定于平台的标志,linux,windows,makefile,mingw,autotools,Linux,Windows,Makefile,Mingw,Autotools,我需要在我的makefile中设置几个只需要windows特定的标志,也就是说,我不希望它们在其他操作系统上被“看到”。我正在使用MinGW构建我的项目。以下是我只想为windows设置的标志: AM_LDFLAGS += -lws2_32 AM_LDFLAGS += -Xlinker --allow-multiple-definition 这是我在makefile.am中所做的: SYS := $(shell gcc -dumpmachine) ifneq (, $(findstring m

我需要在我的makefile中设置几个只需要windows特定的标志,也就是说,我不希望它们在其他操作系统上被“看到”。我正在使用MinGW构建我的项目。以下是我只想为windows设置的标志:

AM_LDFLAGS += -lws2_32
AM_LDFLAGS += -Xlinker --allow-multiple-definition
这是我在makefile.am中所做的:

SYS := $(shell gcc -dumpmachine)
ifneq (, $(findstring mingw, $(SYS)))
    AM_LDFLAGS += -lws2_32
    AM_LDFLAGS += -Xlinker --allow-multiple-definition
endif
当我执行
autoreconf-isf
时,它失败,并显示以下消息:

Makefile.am:34: endif without if
Makefile.am:30: `:='-style assignments are not portable
Makefile.am:30: shell gcc -dumpmachine: non-POSIX variable name
Makefile.am:30: (probably a GNU make extension)
Makefile.am:31: findstring mingw, $(SYS: non-POSIX variable name
Makefile.am:31: (probably a GNU make extension)
aminclude.mk:162: .PHONY was already defined in condition TRUE, which includes condition DX_COND_doc ...
Makefile.am:80:   `aminclude.mk' included from here
core/Makefile.mk:169: ... `.PHONY' previously defined here
Makefile.am:56:   `core/Makefile.mk' included from here
Makefile.am:271: <D: non-POSIX variable name
Makefile.am:230: user variable `distdir' defined here...
/mingw/share/automake-1.11/am/distdir.am: ... overrides Automake variable `distdir' defined here
autoreconf-2.68: automake failed with exit status: 1
Makefile.am:34:endif不带if
Makefile.am:30:`:='-样式指定不可移植
Makefile.am:30:shell gcc-dumpmachine:非POSIX变量名
Makefile.am:30:(可能是GNU make扩展名)
Makefile.am:31:findstring mingw,$(SYS:non-POSIX变量名
am:31:(可能是GNU make扩展名)
aminclude.mk:162:。条件TRUE中已定义了假,其中包括条件DX\u COND\u doc。。。
Makefile.am:80:'aminclude.mk'包含在此处
core/Makefile.mk:169:…`.PHONY'以前在这里定义过
Makefile.am:56:'core/Makefile.mk'包含在这里

Makefile.am:271:您应该将检查添加到configure.ac中,如下所示:

AC_CANONICAL_HOST
case $host_os in
  *mingw*) mingw=true ;;
  *) mingw=false ;;
esac
AM_CONDITIONAL([MINGW], [test x$mingw = xtrue])
然后在Makefile.am中,您可以

if MINGW
AM_LDFLAGS += -lws2_32
AM_LDFLAGS += -Xlinker --allow-multiple-definition
endif

确保不要在Makefile.am!中缩进if条件的主体。

最好使用预定义的
$host\u os
来处理交叉编译scenario@vitalyster我在configure.ac:
ac\u CANONICAL\u HOST case$HOST\u windows*中的操作系统中尝试了这一点)AM_LDFLAGS+=-lws2_32 AM_LDFLAGS+=-Xlinker--允许多个定义;;*)AM_LDFLAGS+=AM_LDFLAGS+=;;esac
但不起作用。我会试试@ptomato的建议,看看它是否有效。@ptomato我试过你的建议,把它弄干净;make失败,出现与strtok相关的错误。因此,我将makefile.am编辑为
if!MINGW…
。这没有意义。我在这里遗漏了什么吗?@ptomato这就是我得到的确切错误:
collect2.exe:error:ld返回了1个退出状态make[1]:***[tape/tape.la]error 1 make[1]:离开目录
…所以,我想在Linux机器上测试一下,所以通过上面的操作,Linux机器不应该看到这些标志,但是它看到了这些标志,并且出错了。上述解决方案有错误吗?@SrinGupta:这不是你的错误;那只会让你抱怨错误。实际误差将高于输出中的误差。您可以通过执行类似于
AC\u MSG\u检查([for mingw])AC\u MSG\u结果([$mingw])的操作来查看检查结果。