我正在构建链接到静态库(foo
)的可执行文件(bar
)。静态库(bar
)依赖于另一个静态库(baz
),但仅使用其中的头文件。
当我尝试构建项目时,这两个库似乎可以很好地构建,但是baz
实际上没有产生任何输出。但是,可执行目标无法构建,声称找不到baz.lib
。
当没有目标使用库中的符号时,为什么要尝试链接库?
我删除了__declspec(dllexport)
中的一些baz
声明,以确保它是作为静态库构建的。
CMake文件分为几个目录,比这更复杂,但这是一般要点:
add_library(baz)
target_include_directories(baz PUBLIC ...)
target_sources(foo PRIVATE ...)
add_library(bar)
target_link_libraries(bar PRIVATE baz ...)
target_include_directories(bar PUBLIC ...)
target_sources(bar PRIVATE ...)
add_executable(foo main.cpp)
target_link_libraries(foo bar)
顺便说一下,使用CMake 3.14.3。
Visual Studio 2019输出以下错误:
LNK1104: cannot open file '..\baz\Debug\baz.lib'
编辑:我刚刚在项目中启用了C(语言),现在正在构建库,但是遇到三个unresolved external symbol
错误。
编辑:好吧,看起来像是在C头周围策略性地添加了两个extern "C" { }
声明,这使我摆脱了所有构建问题。现在调试段错误...