草庐IT

windows - Make 忽略了编译器标志

coder 2024-06-20 原文

我有一个可以在 Ubuntu 上毫无问题地编译的项目。 https://github.com/avalon-lang/avaloni/blob/master/Makefile 处的 Makefile是我正在努力适应 Windows 10 的那个。
我安装了 MingW-w64 和 GNU Make-32。
当我针对 Makefile 运行 make 时,传递给编译器的 CFLAGS 和其他标志不会显示,在回显输出中留下空格而不是编译器标志。因此,找不到成功编译所需的文件。

我尝试用它们的内容替换变量 CFLAGS、SYSINC 和 INC,但没有任何改变。它们只是被忽略,就好像 make 删除了它们一样。

cc          := g++
cflags      := -std=c++11 -g -Wall -pedantic -DDEBUG -fopenmp
ldpaths     := -LC:/Boost/lib
rdpaths     := -Wl,-rpath=C:/Boost/lib
ldflags     := -lboost_filesystem-mgw81-mt-x64-1_68 -lboost_system-mgw81-mt-x64-1_68 -fopenmp
src_dir     := src
inc         := -Isrc -Ideps/qpp
sysinc      := -isystem deps/boost -isystem deps/eigen
build_dir   := build
bin_dir     := bin
target      := $(bin_dir)/avaloni.exe

src_ext     := cpp
sources     := $(shell dir $(src_dir)\*.$(src_ext) /b /s)
objects     := $(patsubst $(src_dir)\%,$(build_dir)\%,$(sources:.$(src_ext)=.o))

install_dir := C:/Avalon
sdk_path    := C:/Avalon/AvalonSdk


.PHONY: all
all: setup $(target)

$(target): $(objects)
    $(cc) $^ -o $(target) $(ldpaths) $(ldflags) $(rdpaths)

$(build_dir)\%.o: $(src_dir)\%.$(src_ext)
    @if not exist "$(dir $@)" mkdir $(dir $@)
    $(cc) $(cflags) $(sysinc) $(inc) -c -o $@ $< #!!! This is the problem line.

在编译过程中,我希望有如下一行:

g++ -std=c++11 -g -Wall -pedantic -DDEBUG -fopenmp -isystem deps/boost -isystem deps/eigen -Isrc -Ideps/qpp -c -o file.o file.cpp

但是我得到:

g++    -c -o file.o file.cpp

最佳答案

这样做的原因是 (a) 您正在使用非标准变量来保存您的编译器标志,并且 (b) 您的模式规则不匹配。

由于 (b),make 选择了用于创建目标文件的内置规则,并且由于 (a),内置规则中没有使用您的标志。

您的模式规则不匹配的原因是 GNU make 不支持路径名中的反斜杠。您必须在所有规则中使用正斜杠:

$(build_dir)/%.o: $(src_dir)/%.$(src_ext)
  ...

关于windows - Make 忽略了编译器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53891476/

有关windows - Make 忽略了编译器标志的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  3. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. c - mkmf 在编译 C 扩展时忽略子文件夹中的文件 - 2

    我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。

  6. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. Ruby - 如何在读取文件时跳过/忽略特定行? - 2

    在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?

  9. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  10. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

随机推荐