cmake - CMake:静态库被忽略(对象编译两次)
问题描述
我的项目文件夹包含包含我src
的proto
C++ 源文件的子文件夹。我正在使用 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
更具体地说,src
有CMakeLists.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)
,但它没有做任何事情。
谢谢你的帮助。
编辑:解决方案在我最后的评论中。
解决方案
推荐阅读
- python - 使用 2 个 SQS 订阅向 SNS 主题发送消息,每个订阅都有一个 lambda 触发器导致空队列
- java - 查找两个矩阵之间的偏移量
- python - 将一行附加到熊猫数据框
- powershell - 对每列进行排序并仅显示 CSV 中的最大值 - powershell
- c# - 有没有办法单元测试可以访问输出来断言?
- c# - 如何通过服务器端更新 Materializecss 自动完成?
- typescript - 从 firebase 6.0 更新到 6.1 正在破坏我的云功能应用程序初始化
- java - Spring Boot 重定向到 /
- labview - 从LabVIEW调用ImageJ宏
- botpress - botpress如何显示技能选择的动态列表?