我正在尝试将开源项目中的一组 .c 文件编译成静态库。我已经创建了一个 VC++9 项目文件,像往常一样设置所有内容。我在项目中添加了两个 .c 文件。它们没有任何特殊的编译设置——所有设置都是在项目级别设置的,并且设置为默认值,除了我关闭了预编译头。
我按下“构建项目”- VC++ 显示“完成”,创建了两个 .obj 文件和一个 .lib 文件,但生成的 .lib 文件中不存在来自其中一个 .c 文件的函数。
如果我在两个文件之一的开头添加 #error
,VC++ 将停止编译并报告。但是如果我对另一个文件做同样的事情,它只是静默编译并且不报告错误,所以它显然没有编译文件,这就是函数没有到达 .lib 文件的原因。
现在我假设如果我添加一些文本(如 #error
)作为 .c 文件的第一行,编译器将看到它,而不管任何预处理器设置、编译器选项等。然而我有一个文件log.c
:
#error
whatever text follows
和 Visual C++ 报告:
1>------ Build started: Project: MyProject, Configuration: Debug Win32 ------
1>Compiling...
1>log.c
1>Build log was saved at "file://whatever\Debug\BuildLog.htm"
1>MyProject - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
编译器发生了什么,我该如何让它改变主意?
最佳答案
编译器可能认为目标文件与源文件是最新的。目标文件之一的时间戳是 future 的吗?
关于c++ - 两个 .c 文件具有相同的编译设置 - VC++ 报告没有错误并且不编译其中一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326791/