我在C ++项目上工作,我使用CMake来构建我的文件。我的构建失败原因 未定义的引用`Software :: Software()’,但我没有看到问题。如果您有任何想法,请不要犹豫,谢谢……
你陷入了陷阱 FILE(GLOB ...) 。 重新运行CMake应该解决这个问题,但你应该放弃使用GLOB来收集你的源文件。例如,您可以按如下方式明确列出它们:
FILE(GLOB ...)
set(SOURCES src/main.cpp src/Softwares.cpp src/SoftwaresConfigurations.cpp)
我将解释下面发生的事情。
官方文档说明如下:
我们不建议使用GLOB从源树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时要求CMake重新生成。
所以可能发生的是你用一个源文件创建了项目。 CMake跑了 GLOB 在配置时,只找到一个.cpp文件。 然后,你添加了两个文件(CMake不知道)并添加了 #include 到你的 SoftwaresConfiguration.cpp 。这会触发重建。但是,因为CMake不知道 Softwares.cpp ,它不构建该文件,链接器生成一个未引用的符号。
GLOB
#include
SoftwaresConfiguration.cpp
Softwares.cpp