我知道有几个问题有类似的标题,但似乎没有提供我需要的答案(纠正我,如果我错了).
考虑这个makefile:
SOURCES=file1.cpp file2.cpp file3.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=myprog
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CXX) -o $@ $(OBJECTS)
file1.o: file1.cpp file1.h
file2.o: file2.cpp file2.h file1.h
file3.o: file3.cpp
.cpp.o:
$(CXX) $(CXXFLAGS) -c -o $@ $<
Run Code Online (Sandbox Code Playgroud)
如果我更改file1.h,则运行以下命令:
g++ -c -o file1.o file1.cpp
g++ -c -o file2.o file2.cpp
g++ -o myprog file1.o file2.o file3.o
Run Code Online (Sandbox Code Playgroud)
我想拥有的是:
g++ -c file1.cpp file2.cpp
g++ -o myprog file1.o file2.o file3.o
Run Code Online (Sandbox Code Playgroud)
(我知道我不能用GCC指定对象输出目录,但我可以使用它;应该可以解决一些cd命令.)
在nmake中,这是通过双冒号推理规则(所谓的" 批处理模式规则")来完成的.基本上,它将多个目标的推理规则(例如".obj.cpp:")分组,并为所有依赖项调用编译器,而不是每个文件调用一次.该$<变量获取依赖项列表,而不仅仅是第一个.
现在我们正在使用并行构建(make -j),但它有自己的问题,VC++编译器在一次调用模式下运行得更好,所以我更喜欢使用它.
我有visual studio 2013社区版,我得到了pbrt-v2代码库并且一直在尝试构建解决方案,但这是我遇到的错误之一(它与nmake似乎有关):
NMAKE - Error 1 error U1077: 'if' : return code '0x1'
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么办,因为其他说明似乎不太清楚.任何帮助将不胜感激!谢谢你,祝你有个美好的一天!
-------------- UPDATE --------------------
我得到了它在Visual Studio 2013上编译和构建.问题是我认为我已经过时的PBRT文件了.基本上我做的是我通过github检查了项目,我认为应该可以工作,但后来我注意到你可以在网站上下载最新的pbrt-v2文件.事实上,作者有一个VS studio 2015的解决方案文件,我删除并重新安装了2013年,因为我认为这是问题所在.无论如何,使用我直接从网站下载的文件中的2012,我能够构建解决方案.我会保留这个问题以防万一有人遇到类似的问题.
我们在这里使用nmake构建了一些旧的C代码.
是否有自动方式将Makefile拉入Visual Studio 2005并创建项目?一些在MSDN上搜索表明VS6可以做到这一点,但看起来VS7/8放弃了这个功能.
如有必要,我可以使用project.mak文件作为参考从头开始构建项目,但对于更复杂的项目,这可能不可行.
nmake.exe从我跑的时候make我得到这个错误:
Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1065: invalid option '-'
Run Code Online (Sandbox Code Playgroud)
但我不会在任何地方作为选项传递' - '.
如果我从make外部运行相同的命令它可以正常工作.
我有以下Makefile
FILE = $(shell) *.c
FILE += $(shell) *.cpp
exec:
@echo $(FILE)
Run Code Online (Sandbox Code Playgroud)
这与make完美搭配.这会引发nmake的以下错误
makefile(2) : fatal error U1036: syntax error : too many names to left of '='
Stop.
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?
没有线
FILE += $(shell) *.cpp
Run Code Online (Sandbox Code Playgroud)
nmake工作得非常好.
我在VS 2012控制台中使用nmake来编译GDAL,我想知道哪个命令可以帮我删除上次nmake命令生成的所有文件.
c:\gdal>nmake clean
Microsoft (R) Program Maintenance Utility Version 11.00.60610.1
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: don't know how to make 'clean'
Stop.
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Windows 7上为一个工作项目构建OpenSSL,但我遇到了麻烦.
INSTALL指令说明了这样做的简单方法:
Quick Start
-----------
If you want to just get on with it, do:
on Windows (only pick one of the targets for configuration):
$ perl Configure { VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE }
$ nmake
$ nmake test
$ nmake install
Run Code Online (Sandbox Code Playgroud)
我能运行perl配置VC-WIN64A没问题.但是,当我尝试运行nmake时,我得到以下输出:
>C:\Users\jget952\Downloads\openssl-1.1.0f>"C:\Program Files (x86)\Microsoft >Visual Studio 14.0\VC\bin\amd64\nmake.exe"
>
>Microsoft (R) Program Maintenance Utility Version 14.00.24225.1
>Copyright (C) Microsoft Corporation. All rights reserved.
>
>"C:\Program Files (x86)\Microsoft Visual Studio
>14.0\VC\bin\amd64\nmake.exe" depend && "C:\Program …Run Code Online (Sandbox Code Playgroud) 我正在尝试添加一个必须在为Visual Studio 2010 64位配置的源树中构建为32位库(我们称之为sdk32)的项目.即每个项目都是64位库或应用程序,但我需要这个sdk32项目作为SDK的32位包装器.我知道在Linux中可以使用-m32标志来编译器(如此处所解释的那样使用QMAKE来构建项目的32位和64位版本); 但是有可能有一个类似的解决方案,所以在配置为VS2010 64bit(调用其vcvarsall.bat x64)的控制台中,在为我的树运行qmake -r后,我得到为x64配置的每个项目,但sdk32将配置为Win32的?它也适用于qmake -r -tp vc
到目前为止,我能想到的唯一解决方案是一个肮脏的技巧,调用一个脚本(如下所述:Qt:在运行之前运行一个脚本),它将"理解"vcxproj和Makefile中的x64标签并用Win32替换它们,但是这个解决方案对我来说似乎很脆弱,而且过于依赖于项目现在的样子,这将在未来以一种舒适的方式阻止对配置的更改.我确信之前已经发生了这种情况,但是谷歌搜索了近一天之后我找不到解决办法.有什么建议?
PS:"sdk32"项目根本不需要QT.问题是我们使用qmake作为Makefile和.vcxproj文件创建步骤(因为许多其他项目确实使用Qt).
我有一个docker容器,用于编译项目,构建设置并将其导出容器.为此,我安装了签出的源($(Build.SourcesDirectory):C:/git/在TFS docker run任务的卷部分中使用)和2个不同文件夹中的输出文件夹.现在我的项目包含一个子模块,该子模块也被正确检出,所有文件都在那里.但是,当我的脚本执行nmake时,我收到以下错误:
Cannot find file: \ContainerMappedDirectories\347DEF6A-D43B-48C0-A5DF-CE228E5A10FD\src\Submodule\Submodule.pro
映射容器的路径映射到C:/git/Windows docker容器内部(在Windows主机上运行).我能够使用交互式PowerShell启动docker容器并挂载文件夹并找出以下内容:
docker cp project/ container:C:/test/和运行构建脚本时,它会找到所有文件并成功编译.所以似乎nmake在docker中遍历已安装的容器时遇到了麻烦.知道如何解决这个问题吗?我宁愿避免将项目复制到容器中,因为与简单地安装签出的项目相比,这需要相当长的时间.
我正在尝试使用 PostgreSQL 作为矢量数据库。同样,我使用此处提供的说明将 PostgreSQL 安装到我的 Windows 系统中。
\n为了安装 pgvector,我按照本页中给出的说明进行操作。
\n我正在尝试在使用 Windows Server 2016 操作系统的远程计算机中完成此设置。\nPostgreSQL 版本:15.3
\n我无法成功安装 pgvector 扩展。\n运行该nmake /F Makefile.win命令时,出现以下错误:
\n\n\n致命错误 C1083: 无法打开包含文件 \xe2\x80\x98crtdefs.h\xe2\x80\x99: 没有这样的文件或目录
\n
我也尝试使用conda安装。\n命令:conda install -c conda-forge pgvector\n使用conda安装后创建矢量扩展时出现的错误如下:
\n
编辑 1: \n根据以下问题更新帖子。
\n\n\n文件 crtdefs.h 在您的系统上在哪里?(可能有多个。)调用 cl.exe 时 INCLUDE 环境变量的值是多少?
\n
crtdefs.h 文件位置:C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.36.32532\\include
\n早些时候我没有添加 INCLUDE 环境变量。现在,我根据某些类似的错误(无法打开 include/lib 文件)添加了 INCLUDE 和 LIB 环境变量。我必须分别添加来自 Microsoft Visual studio 和 Windows …