[英]Confused about add_library()
我目前正在开发一个库,希望该库可以帮助学生使用c ++非常轻松地渲染基本2D图形。 问题是我构建它的方式。 这是一个工作版本:
cmake_minimum_required( VERSION 2.8 )
project( HWAPI )
set( CMAKE_CXX_STANDARD 11 )
find_package( SDL2 REQUIRED )
include_directories( ${PROJECT_SOURCE_DIR}/include/ )
include_directories( ${SDL2_INCLUDE_DIR} )
set( SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/tests/basic_example.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/window.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/window.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/color.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/color.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/vec2.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vec2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/hwapi.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/hwapi.cpp
)
add_executable( example ${SRC_FILES} )
target_link_libraries( example ${SDL2_LIBRARIES} )
可执行文件已成功创建,并且该应用程序按预期工作。 但是我想将其构建为一个库并将其链接到主程序,以便可以轻松地在代码块(我的学校使用的代码)中创建自定义模板。 到目前为止,这是我所做的:
cmake_minimum_required( VERSION 2.8 )
project( HWAPI )
set( CMAKE_CXX_STANDARD 11 )
find_package( SDL2 REQUIRED )
include_directories( ${PROJECT_SOURCE_DIR}/include/ )
include_directories( ${SDL2_INCLUDE_DIR} )
set( SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/include/window.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/window.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/color.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/color.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/vec2.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vec2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/hwapi.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/hwapi.cpp
)
add_library( HW_LIB ${SRC_FILES} )
target_link_libraries( HW_LIB ${SDL2_LIBRARIES} )
add_executable( basic_example
${CMAKE_CURRENT_SOURCE_DIR}/tests/basic_example.cpp
)
target_link_libraries( basic_example ${HW_LIB} )
运行make会出现以下错误:
CMakeFiles/basic_example.dir/tests/basic_example.cpp.o: In function `main':
basic_example.cpp:(.text+0x55): undefined reference to `hw::color::color(unsigned char, unsigned char, unsigned char, unsigned char)'
basic_example.cpp:(.text+0x6b): undefined reference to `dummy_api::point(int, int, hw::color const&)'
basic_example.cpp:(.text+0x8c): undefined reference to `hw::color::color(unsigned char, unsigned char, unsigned char, unsigned char)'
basic_example.cpp:(.text+0xac): undefined reference to `dummy_api::line(int, int, int, int, hw::color const&)'
basic_example.cpp:(.text+0xcd): undefined reference to `hw::color::color(unsigned char, unsigned char, unsigned char, unsigned char)'
basic_example.cpp:(.text+0xfb): undefined reference to `dummy_api::outline_triangle(int, int, int, int, int, int, hw::color const&)'
basic_example.cpp:(.text+0x13b): undefined reference to `dummy_api::rectangle(int, int, int, int, hw::color const&)'
basic_example.cpp:(.text+0x177): undefined reference to `dummy_api::outline_rectangle(int, int, int, int, hw::color const&)'
basic_example.cpp:(.text+0x1b5): undefined reference to `dummy_api::draw(std::function<void ()>, std::function<void ()>)'
collect2: error: ld returned 1 exit status
make[2]: *** [basic_example] Error 1
make[1]: *** [CMakeFiles/basic_example.dir/all] Error 2
make: *** [all] Error 2
我要运行的示例仅调用该库提供的一些函数,仅此而已。 为什么我不能按预期创建库? 我敢肯定,关于add_library的某些内容我不了解(即使我花了很多时间来查看文档)。 其他相关的帖子表明我的实现存在问题(例如,一个函数的多个定义),但事实并非如此,因为我可以完美地运行该应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.