我有一个C++项目,在其中有以下代码行:
#include <curl/curl.h>
我正在使用CURL
库从传感器获取IMU数据。我准备了一个看起来像这样的CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.5.1)
project(imu_data_access_cmake_test)
set(CMAKE_CXX_STANDARD 11)
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIRS})
set(SOURCES imu_data_access.cpp ${CURL_INCLUDE_DIRS}/curl/curl.h)
add_executable(imu_data_access_cmake_test ${SOURCES})
#add_executable(imu_data_access_cmake_test imu_data_access.cpp)
target_link_libraries(imu_data_access_cmake_test ${CURL_LIBRARIES})
这个方法很有效。不过,如果我去掉
include_directories
这行,并将add_executable
改为只使用我的imu_data_access.cpp
作为源文件,cmake
就不会抛出错误,一切仍然正常。我认为这是由于target_link_libraries
这行引起的。如何确定应该使用
include_directories
还是target_link_libraries
来包含库?如果包/库有一个.so
文件,我们可以简单地忽略该包/库的include_directories
吗?编辑:如何知道是否应该使用
include_directories
和target_link_libraries
来包含库?
include_directories
,编译器也会选择它吗? - skrinclude_directories
还是target_link_libraries
来引用一个库? - skrtarget_link_libraries
应该在任何情况下使用。我已经更新了答案。 - Tsyvarev