当我发布this question关于尝试构建DLL而没有获取DLL时,一位评论者提到我可能没有在项目中导出任何符号。当我检查时,我发现CMake构建的项目文件没有包含项目的.h文件,所以我添加了它。它包含所需的导出声明。不幸的是,重建仍然不会生成DLL,并且在玩了一下之后,我发现编译器似乎根本没有注意到.h文件;当我在那里写的东西显然在语法上无效时,它甚至都不会破坏构建。
为什么编译器在将它添加到项目后会忽略.h文件,如何才能正确编译?
答案 0 :(得分:2)
编译器只会在.h文件正在构建的翻译单元(.c文件)中将包含时进行翻译。添加对它的引用makefile本身不会导致.h文件被翻译。如果它是目标 - 没有规则来构建.h文件,因为它没有任何意义。如果它是依赖,对它的更改将导致构建目标,但如果目标不包含头文件,则它不是真正的依赖项。
另一种可能性是包含标题但包含一些未启用的条件编译。