关于CMake错误的问题:没有向目标提供源



我正试图使用cmake和eclipse将FreeRtos添加到我的项目中,但我遇到了一个错误。我正在运行debian 10,我的cmake版本是3.13.4。cmake的文件可以在这个git repo中找到。当我运行以下命令时:

frank@debian:~/temp2/build$ cmake ../../temp2/AM335X-FreeRTOS-lwip/ -G"Eclipse CDT4 - Unix Makefiles"

我得到以下错误:

CMake Error at ProjectIncludes.cmake:46 (add_library):
No SOURCES given to target: lib_third_party_ti_platform_beaglebone
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:30 (add_library):
No SOURCES given to target: lib_third_party_ti_utils
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:38 (add_library):
No SOURCES given to target: lib_third_party_ti_mmcsdlib
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:54 (add_library):
No SOURCES given to target: lib_third_party_ti_nandlib
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at CMakeLists.txt:15 (add_executable):
No SOURCES given to target: freeRTOSBBB.elf

CMake Error at ProjectIncludes.cmake:23 (add_library):
No SOURCES given to target: lib_third_party_ti_drivers
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:115 (add_library):
No SOURCES given to target:
lib_third_party_amazon_freertos_kernel_portable_MemMang
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:86 (add_library):
No SOURCES given to target:
lib_third_party_amazon_libraries_3rdparty_lwip_src
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:101 (add_library):
No SOURCES given to target: src_portable_lwip_ports_cpsw_netif
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:106 (add_library):
No SOURCES given to target: lib_third_party_amazon_freertos_kernel
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:111 (add_library):
No SOURCES given to target:
src_portable_FreeRTOS_portable_GCC_ARM_CA8_amm335x
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:65 (add_library):
No SOURCES given to target: lib_third_party_ti_system_config_armv7a
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:134 (add_library):
No SOURCES given to target: src_application
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:120 (add_library):
No SOURCES given to target: src_portable_AM335X
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

CMake Error at ProjectIncludes.cmake:129 (add_library):
No SOURCES given to target: src_portable_ported_aws_bufpool
Call Stack (most recent call first):
CMakeLists.txt:33 (include)

这个错误说明了它的含义:没有库的来源。

#adding entries for lib_third_party_ti_mmcsdlib
include_directories("${PROJECT_SOURCE_DIR}/lib/third_party/ti/mmcsdlib")
include_directories("${PROJECT_SOURCE_DIR}/lib/third_party/ti/mmcsdlib/include")
add_library(lib_third_party_ti_mmcsdlib "") # NO SOURCES HERE!!!!
target_compile_definitions(lib_third_party_ti_mmcsdlib 
PRIVATE -DBOOT=MMCSD -DCONSOLE=UARTCONSOLE
)
subdirs("${PROJECT_SOURCE_DIR}/lib/third_party/ti/mmcsdlib")
subdirs("${PROJECT_SOURCE_DIR}/lib/third_party/ti/mmcsdlib/include")

您应该阅读cmake中关于add_library的文档。如果您没有提供任何源文件,您应该将其声明为INTERFACE

add_library(LibName INTERFACE(

在这种情况下,不会生成编译目标。否则,您可以将其声明为IMPORTED,那么cmake也不会尝试创建编译目标。

对于SHAREDSTATICOBJECT,您始终需要提供来源。

您应该检查ProjectIncludes.cmake以了解您真正想要做的事情:编译新的库或导入它们。

对我来说(来自谷歌(,当CMaketarget_sources只有PRIVATE源,没有PUBLIC源时,就会发生此错误。

我必须至少制作一个PUBLIC源文件:

旧:

target_sources(${PROJECT_NAME}
PRIVATE
External/dbscan.cpp
main.cpp
)

新增:

target_sources(${PROJECT_NAME}
PRIVATE
External/dbscan.cpp
PUBLIC
main.cpp
)

最新更新