c++ - 两个 .c 文件具有相同的编译设置 - VC++ 报告没有错误并且不编译其中一个

标签 c++ c visual-c++ linker

我正在尝试将开源项目中的一组 .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/

相关文章:

c++ - 我的程序的独特行为,无法识别

c++ - 能否在 MFC 按钮控件上检测到鼠标右键单击事件?

c++ - 写入以 boost 共享内存

c - 双维数组,属性值,但以后无法读取

c++ - OpenCL:GPU 线程有多轻?

c - 是否可以检测程序是否已通过/proc/self/mem 动态链接?

c - 我怎样才能与 C 预处理器连接两次并扩展一个宏,如 "arg ## _ ## MACRO"?

c - 如何将两个windows vc静态库合并为一个

c++ - 使用 Eigen 3 库编写一个以转置作为参数的函数

c++ - 如何使用包装在 ComPtr 中的 Direct3D 11 指针来获取 11.1 接口(interface)?