CMake应用程序和DLL都链接到相同的静态库?

时间:2017-04-04 19:09:38

标签: dll static cmake linker

我试图通过CMake让事情变得简单,我遇到了问题。

我有一个应用程序需要链接到一个DLL本身链接到静态库。每个模块都驻留在自己的文件夹中,并带有自己的CMakeLists.txt文件。

我使用add_subdirectory()来构建项目层次结构,以便DLL add_subdirectory()添加Static lib(和指向Static的链接),App使用add_subdirectory()添加到DLL项目。

现在,问题是在最终项目中,CMake将应用程序链接到DLL和静态库,尽管我明确要求它在CMakeLists.txt文件中仅链接到DLL。显然,如果DLL已经存在,我不希望应用程序链接到静态。

我怀疑它与add_subdirectory()有关,但我不知道如何解决这个问题。有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,“library1”与“library2”的链接传播到“library1”的所有用户(例如,应用程序)。只要“library2” SHARED STATIC ,就会这样做。

对于supress links传播,使用 PRIVATE 链接:

target_link_libraries(library1 PRIVATE library2)