首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake链接器输入文件未使用,因为链接未完成

CMake链接器输入文件未使用,因为链接未完成
EN

Stack Overflow用户
提问于 2020-01-29 22:16:38
回答 1查看 862关注 0票数 2

我想把一个旧的副业转移到CMake。以前它使用了一个带有自定义变量、定义等的Makefile。我指定了相同的标志来编译各种配置。我是这样做的:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.2.2)
project(wise_RK)

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(SOURCES main.cpp devices/RK.cpp LogWriter/LogWriter.cpp)
set(CMAKE_CXX_FLAGS "-DIMA -std=c++11 -Wall -Wextra -c -O2 -MMD -MP -MF '$@.d'")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

include_directories(
    structs
    devices
    LogWriter
    /home/data/lib/wise_versioning
    /home/data/lib/wisenet
    /home/data/lib/wise_log
    /home/data/lib/wise_rs_device
    /home/data/lib/json
)

# wise_rs_device
add_library(wise_rs_device STATIC IMPORTED GLOBAL)
set_target_properties(wise_rs_device PROPERTIES
    IMPORTED_LOCATION "/home/data/lib/wise_rs_device/libwise_rs_device.a"
    INTERFACE_INCLUDE_DIRECTORIES "/home/data/lib/wise_rs_device/"
)

# wisenet
add_library(wisenet STATIC IMPORTED GLOBAL)
set_target_properties(wisenet PROPERTIES
    IMPORTED_LOCATION "/home/data/lib/wisenet/libwise_net_rs485.so"
    INTERFACE_INCLUDE_DIRECTORIES "/home/data/lib/wisenet/"
)

#wise_log
add_library(wise_log STATIC IMPORTED GLOBAL)
set_target_properties(wise_log PROPERTIES
    IMPORTED_LOCATION "/home/data/lib/wise_log/Release/GNU-Linux/libwise_log.so"
    INTERFACE_INCLUDE_DIRECTORIES "/home/data/lib/wise_log/"
)

add_executable(wise_rk ${SOURCES})

target_link_libraries(wise_rk PRIVATE wise_rs_device wisenet wise_log)

add_definitions(-DSOME_IMPORTANT_DEFINITION)

-D由各种配置定义。

在Makefile中,程序集中涉及的项目对象文件(非库)列表如下所示:

代码语言:javascript
运行
复制
OBJECTS:=$(shell find * -type f -name "*.cpp" | sed "s/\.cpp/\.o /" | sort)
DEPENDS:=$(addprefix build/$(CONF)/, ${OBJECTS:.o=.o.d})
-include ${DEPENDS}

当我构建CMake时:

代码语言:javascript
运行
复制
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/wise_rk.dir/link.txt --verbose=1
/usr/bin/c++   -DIMA -std=c++11 -Wall -Wextra -c -O2 -MMD -MP -MF '$@.d'   CMakeFiles/wise_rk.dir/main.cpp.o CMakeFiles/wise_rk.dir/devices/RK.cpp.o CMakeFiles/wise_rk.dir/LogWriter/LogWriter.cpp.o  -o wise_rk -rdynamic /home/data/lib/wise_rs_device/libwise_rs_device.a /home/data/lib/wisenet/libwise_net_rs485.so /home/data/lib/wise_log/Release/GNU-Linux/libwise_log.so 
c++: warning: CMakeFiles/wise_rk.dir/main.cpp.o: linker input file unused because linking not done
c++: warning: CMakeFiles/wise_rk.dir/devices/RK.cpp.o: linker input file unused because linking not done
c++: warning: CMakeFiles/wise_rk.dir/LogWriter/LogWriter.cpp.o: linker input file unused because linking not done
c++: warning: /home/data/lib/wise_rs_device/libwise_rs_device.a: linker input file unused because linking not done
c++: warning: /home/data/lib/wisenet/libwise_net_rs485.so: linker input file unused because linking not done
c++: warning: /home/data/lib/wise_log/Release/GNU-Linux/libwise_log.so: linker input file unused because linking not done
make[2]: Leaving directory `/home/anzipex/Downloads/wise_RK/build'
/usr/local/bin/cmake -E cmake_progress_report /home/anzipex/Downloads/wise_RK/build/CMakeFiles  1 2 3
[100%] Built target wise_rk
make[1]: Leaving directory `/home/anzipex/Downloads/wise_RK/build'
/usr/local/bin/cmake -E cmake_progress_start /home/anzipex/Downloads/wise_RK/build/CMakeFiles 0

我不知道下一步该怎么解决这类问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 22:57:08

我将所有的.so库都改为SHARED。还删除了-c -O2 -MMD -MP -MF '$@.d'的一部分旗帜,比如@Botje写道。看起来像是项目建好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59969022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档