我有Visual Studio 2022社区,并从美国海军天文台下载了一些c天文学软件,NOVAS.我在几年前就用c编程,但不擅长在现代的Visual Studio中使用命令提示符进行编译.我在网上找到的所有教程都从"Hello world"跳到了一个复杂的例子,创建了各种各样的宏,并在整个创建过程中定位文件.

我想要一个nmake的简单makefile,它遵循directions from the US Naval Observatory中的这一步(第C-27页):

B.编译和链接文件checkout-stars.c,novas.c,novascon.c, nutation.c、solsys3.c和readeph0.c.命名生成的应用程序 结帐明星

这些C文件中的一些除了签出-stars.c是外,都有一个.h文件.所有文件似乎都有适当的#INCLUDE指令.该程序的目的是执行包中的许多函数,以显示包已正确编译.

我之所以try nmake而不是直接在命令行上编译,是因为我预计命令行调用将非常长.此外,我希望它易于修改,因为我执行更复杂的测试,然后使用这个包开发我自己的程序.

推荐答案

对于最简单的Makefile,只需使用标准的内置规则.例如,要创建checkout-stars.exe个,以下nmake个Makefile就足够了:

TARGET  = checkout-stars.exe
SOURCES = checkout-stars.c novas.c novascon.c nutation.c solsys3.c readeph0.c
OBJECTS = $(SOURCES:.c=.obj)
CFLAGS  = -W3 -O2 -nologo

$(TARGET): $(OBJECTS)
    link -nologo $** 
$(OBJECTS): *.h
clean:
    del /q $(OBJECTS) $(TARGET) 

如果您修改any个本地头文件(*.h),那么all给定源文件将被重新编译;这可能过于宽泛,但很容易说明.

要使用,请在VS Developer命令提示符下键入nmake以编译并链接以创建exe.要删除创建的临时文件,请键入nmake clean.

C++相关问答推荐

malloc实现:判断正确的分配对齐

如何一次获取一个字符

难以理解Makefile隐含规则

为什么内核使用扩展到前后相同的宏定义?

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

在CLANG中调试预处理器宏

这个计算C中阶乘的函数正确吗?

I2C外设在单次交易后出现故障

如何使用C++在控制台中以彩色打印被阻止的客户端

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

MacOS下C++的无阻塞键盘阅读

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

不同原型的危险C函数是可能的

Caesar密码调试:输出文本末尾的问号和随机字符

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

在哪里可以找到叮当返回码的含义?

std::malloc/calloc/realloc/free 与纯 C 的 malloc/calloc/realloc/free 有什么不同

为什么写入关闭管道会返回成功

在带中断的循环缓冲区中使用 易失性