首页 > 解决方案 > CMake:静态库被忽略(对象编译两次)

问题描述

我的项目文件夹包含包含我srcprotoC++ 源文件的子文件夹。我正在使用 CMake 来帮助编译。运行时make myproject,它会在 中正确创建库的目标文件build/CMakeFiles/myproject.dir,并将这些文件链接以创建静态库build/libmyproject.a(就像我认为应该的那样)。

Root 还包含run.cpp依赖于库的测试文件。但是,当我make run运行build/CMakeFiles/run.dir. 我怀疑 make 根本看不到库。这是正常/预期的行为吗?如果没有,我该如何解决?

这是CMakeLists.txt我正在使用的:

cmake_minimum_required(VERSION 3.13.0)
project(myproject)

find_package(PkgConfig REQUIRED)

set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(BASEPATH "${CMAKE_SOURCE_DIR}")

add_library(myproject)

add_subdirectory(src)    # source files...
add_subdirectory(proto)  # included from here

target_include_directories(myproject PUBLIC
    # ...several library file paths
)
target_link_directories(myproject PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/protobuf/src/.libs
)
target_link_libraries(myproject tbb pthread protobuf)
target_compile_options(myproject PUBLIC -D_REENTRANT -fPIC)

add_executable(run run.cpp)

target_link_libraries(run myproject)
target_compile_options(run PUBLIC -D_REENTRANT -fPIC)

注意:这些是通过子文件夹中的target_sources()一些文件包含的。CMakeLists.txt更具体地说,srcCMakeLists.txt(内容如add_subdirectory(fold))和一些子文件夹,如fold,每个子文件夹都包含一个CMakeLists.txt(内容target_sources(myproject PUBLIC file.hpp file.cpp))。

我尝试添加target_link_directories(run PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/build),但它没有做任何事情。

谢谢你的帮助。

编辑:解决方案在我最后的评论中。

标签: cmake

解决方案


推荐阅读