CMake构建C++项目遇异常:头文件找不到且无目标文件
CMake项目编译报错解决方案:找不到myCode/BaseCode.h
问题根源
- 主可执行文件未关联
myCode库,编译器无法定位头文件路径,且库的构建目标未被纳入主项目的构建依赖链。 library/CMakeLists.txt中存在错误链接配置:target_link_libraries(myCode PRIVATE ${PROJECT_NAME}),此时主可执行目标尚未创建,且逻辑上应为可执行文件链接库,而非库链接可执行文件。
修复步骤
1. 修正library目录的CMakeLists.txt
替换原内容为以下代码,移除错误链接语句并导出头文件路径:
set( HEADERS myCode/BaseCode.h ) set( SOURCES myCode/BaseCode.cpp ) add_library( myCode SHARED ${SOURCES} ${HEADERS} ) # 若项目已定义版本号,取消下一行注释并确保${PROJECT_NAME}_VERSION已正确设置 # set_property( TARGET myCode PROPERTY VERSION ${${PROJECT_NAME}_VERSION} ) # 导出库的公共头文件目录,链接该库的目标会自动继承此路径 target_include_directories(myCode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) install( DIRECTORY myCode/ DESTINATION include/${PROJECT_NAME} COMPONENT devel FILES_MATCHING PATTERN "*.h" ) install( TARGETS myCode DESTINATION lib COMPONENT runtime )
2. 修正根目录的CMakeLists.txt
在添加可执行文件后,增加链接myCode库的配置:
cmake_minimum_required(VERSION 3.10) project(myTestProject) # Set the components to build set(components myComponent) # Include subdirectories for each component foreach(component ${components}) add_subdirectory(${component}) endforeach() # Set the output directory for the executable set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # Add the executable add_executable(${PROJECT_NAME} main.cpp) # 链接myCode库,自动处理头文件路径和构建依赖 target_link_libraries(${PROJECT_NAME} PRIVATE myCode)
3. 重新构建验证
删除原有build目录,执行以下命令重新构建:
rm -rf build && mkdir build && cd build cmake .. make
此时编译应正常完成,build目录下会生成myCode库的目标文件,主可执行文件将输出到build/bin/myTestProject。
内容的提问来源于stack exchange,提问作者alpha027
相关产品推荐
相关产品推荐

