我想建立一个具有以下结构的静态库:

Foo/
|-- CMakeLists.txt
|-- file1.c
|-- some_definitions.h
|-- drivers/
    |-- file2.c


这是cmake代码

add_library(myHAL STATIC)


target_sources(myHAL
    PRIVATE
         "${CMAKE_CURRENT_LIST_DIR}/file1.c"
         "${CMAKE_CURRENT_LIST_DIR}/drivers/file2.c"

)

target_include_directories(myHAL PUBLIC ${CMAKE_CURRENT_LIST_DIR}/)
target_include_directories(myHAL PUBLIC ${CMAKE_CURRENT_LIST_DIR}/drivers/)


file2包含some_definitions.h。在some_definitions中,存在一些#define。

我无法构建,找不到定义(例如,未清除FLS_FEATURE_A(首次使用))
当我在驱动程序文件夹中移动some_definitions.h时,就可以构建了。

我做错了什么?我想预处理器不查找定义或找不到some_definitions.h。

最佳答案

您需要使用target_include_directory或include_directory(在较旧的cmake版本上)
这将告诉您的cmake将目录添加到包含路径(就像-I在常规make中一样)
实际上在上一个线程中进行了讨论:How to properly add include directories with CMake

只是include_directories(“ $ {CMAKE_CURRENT_LIST_DIR}”)

10-04 16:23