标签: nmake

nmake Makefile将目标文件放在一个单独的目录中

我在Source文件夹中有我的所有源文件,makefile位于Makefile文件夹中,我希望所有目标文件都放在Objects文件夹中.这是一个我正在研究的C项目.所有这三个文件夹都位于名为Project的文件夹中.

Project文件夹包含:Source Makefile对象

我试图想办法让makefile从Source文件夹中编译源代码,我试过使用:

...
SOURCE_DIR=..\Source
OUTPUT_DIR=..\Objects
.c.obj:
    $(CC) $(SOURCE_DIR)\$*.c /Fo$(OUTPUT_DIR)\$*.obj
...  
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我最后得到一条错误消息,而说不知道如何制作myfile.obj

nmake makefile

6
推荐指数
1
解决办法
6823
查看次数

重用 makefile 规则

我正在学习 makefile,并试图找出如何重用规则。现在我有以下内容:

CPP = cl

CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

.SUFFIXES: .exe .cpp

Exercise35.exe:
    $(CPP) Exercise35.cpp $(CPPFLAGS)

debug:
    $(CPP) Exercise35.cpp $(CPPFLAGS) /D "_DEBUG"
Run Code Online (Sandbox Code Playgroud)

该规则本质上是使用额外的命令行参数debug重复该规则,这似乎很糟糕。Exercise35有没有更好的办法?

nmake makefile

6
推荐指数
1
解决办法
3689
查看次数

NMake模式规则

嗨我决定尝试通过命令行和makefile学习如何构建程序,而不是依赖Visual Studio为我做.在熟悉编译成.obj文件和链接的过程之后,我转到了NMake.我编写了一个基本的makefile来尝试将位于多个文件夹中的源文件编译成.obj文件,将.obj文件的每个文件夹链接到.lib文件,然后将.lib文件链接到.exe文件.

CC=cl /c /EHsc /Fo
LIB=lib /OUT:
LINKER=link /OUT:
EXEC_NAME=Test.exe
DEL=del
MAKE=nmake
OUT=.\out

all: $(OUT)\*.lib
    $(LINKER)$(EXEC_NAME) *.lib

clean:
    $(DEL) $(OUT)

rebuild:
    $(MAKE) clean
    $(MAKE) all

$(OUT)%.lib: $(OUT)\%\*.obj
    $(LIB)%.lib $(OUT)%\*.obj

%(OUT)\%\:
    $(CC)$(OUT)\%\ .\%\*.cpp
Run Code Online (Sandbox Code Playgroud)

当我尝试用nmake all它运行它告诉我:NMAKE : fatal error U1073: don't know how to make '.\out\*.lib'

提前致谢.

c++ nmake makefile compilation

6
推荐指数
1
解决办法
1446
查看次数

Nmake无法在docker mount中找到文件

我有一个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容器并挂载文件夹并找出以下内容:

  1. 所有文件都在容器中.
  2. 在执行docker cp project/ container:C:/test/和运行构建脚本时,它会找到所有文件并成功编译.
  3. 当使用powershell在docker中复制已安装的项目并启动构建脚本时,它也可以工作.

所以似乎nmake在docker中遍历已安装的容器时遇到了麻烦.知道如何解决这个问题吗?我宁愿避免将项目复制到容器中,因为与简单地安装签出的项目相比,这需要相当长的时间.

mount nmake compilation docker

6
推荐指数
0
解决办法
76
查看次数

无法安装 PostgreSQL 的 pgvector 扩展 [Windows]

我正在尝试使用 PostgreSQL 作为矢量数据库。同样,我使用此处提供的说明将 PostgreSQL 安装到我的 Windows 系统中。

\n

为了安装 pgvector,我按照本页中给出的说明进行操作。

\n

我正在尝试在使用 Windows Server 2016 操作系统的远程计算机中完成此设置。\nPostgreSQL 版本:15.3

\n

我无法成功安装 pgvector 扩展。\n运行该nmake /F Makefile.win命令时,出现以下错误:

\n
\n

致命错误 C1083: 无法打开包含文件 \xe2\x80\x98crtdefs.h\xe2\x80\x99: 没有这样的文件或目录

\n
\n

运行 nmake /F Makefile.win 时出错

\n

我也尝试使用conda安装。\n命令:conda install -c conda-forge pgvector\n使用conda安装后创建矢量扩展时出现的错误如下:

\n

创建扩展错误

\n

编辑 1: \n根据以下问题更新帖子。

\n
\n

文件 crtdefs.h 在您的系统上在哪里?(可能有多个。)调用 cl.exe 时 INCLUDE 环境变量的值是多少?

\n
\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 …

postgresql nmake vector-database pgvector

6
推荐指数
1
解决办法
4073
查看次数

QWT安装错误

几个星期前我开始使用Qt,我真的非常喜欢它.我现在需要在我的应用程序中包含图形,经过一些研究,我发现Qwt是最好的方式(而不是自己从头开始做所有事情).我已经在这里工作了几天,我无法弄清楚如何安装它.我使用32位Windows7.我按照INSTALL文件中的说明操作:

来自cmd - >

qmake qwt.pro
nmake
Run Code Online (Sandbox Code Playgroud)

在nmake结束后,我留下了错误

C:\Users\Peyo\Downloads\qwt-6.0.1>qmake qwt.pro

C:\Users\Peyo\Downloads\qwt-6.0.1>nmake

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        cd src\ && "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\nmake.e
xe" -f Makefile

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\nmake.exe" -f Make
file.Debug all

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

moc qwt_dyngrid_layout.h
moc qwt_magnifier.h
moc qwt_panner.h
moc …
Run Code Online (Sandbox Code Playgroud)

c++ qt install nmake qwt

5
推荐指数
2
解决办法
3411
查看次数

使用 nmake.exe windows 在 makefile 中无法识别 addprefix 命令

all: prd.exe

CC=cl
CFLAGS=-O2 -I../src -I. /W4
LDFLAGS = /Zi
LIBSRC = $(addprefix ../lib/, \
        open.c malloc.c \
     ) \
     $(addprefix ../src/, \
        main.c \
      ) \
      helper.c

LIBOBJS = $(LIBSRC:.c=.o)

prd.exe: ../src/main.obj
$(CC) $(LDFLAGS) -Fe$@ *.o

../src/main.obj: ../src/main.c
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.o:
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.i:
$(CC) $(CFLAGS) $(LIBOBJS) -C -E $< > $@

clean:
del /s /f /q ..\lib\*.o ..\src\*.o *.o *.exe *.pdb

distclean: clean
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

致命错误 U1000:语法错误 : ')' …

windows nmake makefile gnu-make

5
推荐指数
1
解决办法
1362
查看次数

如何替换字符串并在Microsoft NMake中添加前缀或后缀?

我正在将GNU Make makefile翻译为Microsoft Visual Studio Makefile.我有三个疑问:

1)如何替换字符串.例如在包含以下内容的文件夹中

namespace_type_function1.cpp
namespace_type_function2.cpp
namespace_type_function3.cpp
Run Code Online (Sandbox Code Playgroud)

我想改变类型让我们说"INT"字符串,所以我终于得到了

namespace_INT_function1.cpp
namespace_INT_function2.cpp
namespace_INT_function3.cpp
Run Code Online (Sandbox Code Playgroud)

2)如何以类似的方式添加前缀3.如何以相同的方式添加后缀.

nmake

5
推荐指数
2
解决办法
3711
查看次数

在命令行中指定资源的包含目录

我正在尝试使用以下行在 Windows 上构建 cURL:

nmake vc-x64 mode=dll VC=10 MACHINE=x64
Run Code Online (Sandbox Code Playgroud)

现在我在构建之前已经完成了此设置:

set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64;%PATH%
set INCLUDE="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include";"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include"
set LIB="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64";"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64"
set LIBPATH="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64"
set PATH="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64";%PATH%)
set INCLUDE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include";%INCLUDE%
set LIB="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64";%LIB%
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

        rc /dDEBUGBUILD=0 /Fo ..\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-w
inssl-obj-lib\libcurl.res ..\lib\libcurl.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) …
Run Code Online (Sandbox Code Playgroud)

windows curl nmake rc libcurl

5
推荐指数
0
解决办法
529
查看次数

CMake 致命错误 LNK1112:模块机器类型“x64”与目标机器类型“x86”冲突

我正在学习如何使用 CMake,

我正在将一个工作项目从 Visual Studio 转换为 Cmake 并使用 NMake 进行构建。当前项目为 x64 和 x86 构建

我当前的 CMakeLists.txt 非常简单:

cmake_minimum_required(VERSION 3.13.0)

project(SimManager CXX)

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)

set(CMAKE_CXX_FLAGS -G"NMake Makefiles")

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(SimManager
    Source/main.cpp
    )

set_target_properties (${PROJECT_NAME} PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED TRUE
    CXX_EXTENSIONS FALSE
    )
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86'
Run Code Online (Sandbox Code Playgroud)

我了解 NMake 选择使用哪个编译器(x86 或 x64)的方式是打开适当的控制台终端。我在用Select x64 Native Tools Command Prompt for VS 2017

被执行的链接器的命令行是:

command "C:\PROGRA~2\MIB055~1\2019\ENTERP~1\VC\Tools\MSVC\1425~1.286\bin\Hostx86\x86\link.exe /nologo @CMakeFiles\SimManager.dir\objects1.rsp /out:SimManager.exe /implib:SimManager.lib /pdb:E:\Projects\SimManager\Debug\SimManager.pdb /version:0.0 …

c++ windows nmake makefile cmake

5
推荐指数
0
解决办法
352
查看次数