当不包括具有"target_sources"的源时,CMake没有发出警告



我有一个依赖foo.cpp的项目

add_library(App SHARED app.cpp)
target_link_libraries(App Module)
target_sources(App PRIVATE foo.cpp)
add_executable(app main.cpp)
target_link_libraries(app App)

这非常有效。但是,如果我删除第3行以进行

add_library(App SHARED app.cpp)
target_link_libraries(App Module)
add_executable(app main.cpp)
target_link_libraries(app App)

那么CMake在配置或构建阶段都不会发出任何警告。我得到的唯一错误是在运行最终的二进制时

./build/src/app/app: symbol lookup error: ./build/src/app/app: undefined symbol: _Z5startiPPc

我可以避免这种情况,以便提前获得警告/错误吗?

我能避免这种情况吗?

您的意思是希望在构建阶段得到这些错误吗?你不能。这是一个加载程序错误,这基本上意味着它无法找到引用的符号,因为找不到库之类的。不,没有办法避免它。

假设你构建并运行了一个正确运行的应用程序,然后继续移动或删除它链接到的库,你会突然出现这个错误。正如你所能想象的,没有人能就此警告你。

最新更新