Eclipse 如何使用CMake链接同一项目中不同目录下的.h和.c文件

Eclipse 如何使用CMake链接同一项目中不同目录下的.h和.c文件,eclipse,gcc,cmake,Eclipse,Gcc,Cmake,我目前正在Eclipse中从事一个嵌入式C项目,交叉编译到M4 Cortex目标。该项目将创建3个单独的可执行文件:apple.hex、orange.hex和pear.hex。“apple”源目录编译、构建和链接时不依赖于“orange”或“pear”。“orange”源目录还编译、构建和链接,没有任何依赖项 然而,“pear”需要从“orange”访问大量的.h和.c资产。我曾多次尝试让我的CMakeLists.txt“查找”并“链接”从“橙色”到“梨”的代码,但都无济于事 这是我当前的CMa

我目前正在Eclipse中从事一个嵌入式C项目,交叉编译到M4 Cortex目标。该项目将创建3个单独的可执行文件:apple.hex、orange.hex和pear.hex。“apple”源目录编译、构建和链接时不依赖于“orange”或“pear”。“orange”源目录还编译、构建和链接,没有任何依赖项

然而,“pear”需要从“orange”访问大量的.h和.c资产。我曾多次尝试让我的CMakeLists.txt“查找”并“链接”从“橙色”到“梨”的代码,但都无济于事

这是我当前的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.0)

file(GLOB LD_FILE *gcc_nrf52.ld)


set(MY_APP_DIR ${CMAKE_SOURCE_DIR}/apps/orange)

create_application(
    NAME
        "pear"
    PLATFORM
        target
    INCLUDE_DIRS
        ./
        ${MY_APP_DIR}
    LINKER_SCRIPT
        ${LD_FILE}
    SOURCES
    ${MY_APP_DIR}/foo.c
    ${MY_APP_DIR}/foo_bar.c
    main.c
LIBRARIES
    SomeLib_1
    SomeLib_2
    SomeLib_3
)
然而,编译器不断抱怨,说它找不到“foo.h”和“foo_bar.h”

1) 为了在pear中访问静态库,我是否需要单独创建一个橙色的静态库

2) 如果我不需要创建一个静态库来从pear访问orange,那么如何将orange链接到pear

3) 我找不到CMake将对象文件放置在何处。他们在哪里

这个项目都在一个makefile下

任何帮助都将不胜感激,谢谢

我能够修复我的目录问题,以便${my_APP_DIR}中的所有include目录都链接到“Pear”。然而,出现了一个新问题。链接器找不到创建可执行映像所需的映射文件:

/usr/local/Caskroom/gcc-arm-embedded/5_4-2016q320160926/gcc-arm-none-eabi-5_4-2016q3/bin//lib/gcc/arm-none-eabi/5.4.1/../../../../arm none-eabi/bin/ld:无法打开映射文件/Users/admin/Github/target/apps/pear/pear.map:没有这样的文件或目录。


我不确定为什么没有创建地图查找。链接器(ld)是否仍缺少文件?

我将尝试回答您的问题
您没有将库链接到目标
您需要类似以下内容:
$
目标链接库(您的目标链接库)
在add_可执行命令之后

3) 我找不到CMake将对象文件放置在何处。他们在哪里

默认情况下,CMake将其所有输出放在构建树中,因此,除非您在CMake文件中大量使用${CMake_SOURCE_DIR}或${CMake_CURRENT_SOURCE_DIR},否则您应该在CMakeLists.txt文件所在的文件夹中找到输出文件。

我将尝试回答您的问题
您没有将库链接到目标
您需要类似以下内容:
$
目标链接库(您的目标链接库)
在add_可执行命令之后

3) 我找不到CMake将对象文件放置在何处。他们在哪里

默认情况下,CMake将其所有输出放在构建树中,因此除非您在CMake文件中大量使用${CMake_SOURCE_DIR}或${CMake_CURRENT_SOURCE_DIR},否则您应该在CMakeLists.txt文件所在的文件夹中找到输出文件。

编译器不断抱怨,说它找不到“foo.h”和“foo_bar.h”.
-检查这些文件是否存在于其中一个include目录下。也许,它们应该在
${CMAKE\u SOURCE\u DIR}/apps/orange
下。至于其他问题,这取决于你使用“梨”中“橙”的方式。如果您只是从“orange”编译一些源文件作为“pear”可执行文件的一部分,那么您不需要库。@Tsyvarev,我的CMakeLists.txt文件需要什么命令才能“只是从“orange”编译一些源文件作为“pear”可执行文件的一部分?”对于您的“pear”文件,您有什么例子可以指给我吗你从“橙色”中列出源文件
foo.c
foo\u bar.c
,是吗?这就是我的意思。@Tsyvarev,是的,我列出了“orange”中的源文件foo.c和foo_bar.c。我能够修复我的目录错误,以便链接器可以在“orange”中找到源文件。然而,现在链接器正在抱怨找不到映射文件“pear.map”。“无法打开pear.map,没有这样的文件或目录”。我的CMakeLists.txt文件仍然缺少一些项目,我想。正如您所看到的,注释不适合多行错误消息:将该消息添加到问题帖子中(通过)。另外,确保错误消息与您发布(创建)的代码相对应。
编译器不断抱怨,说它找不到“foo.h”和“foo_bar.h”。
-检查这些文件是否存在于其中一个include目录下。也许,它们应该在
${CMAKE\u SOURCE\u DIR}/apps/orange
下。至于其他问题,这取决于你使用“梨”中“橙”的方式。如果您只是从“orange”编译一些源文件作为“pear”可执行文件的一部分,那么您不需要库。@Tsyvarev,我的CMakeLists.txt文件需要什么命令才能“只是从“orange”编译一些源文件作为“pear”可执行文件的一部分?”对于您的“pear”文件,您有什么例子可以指给我吗你从“橙色”中列出源文件
foo.c
foo\u bar.c
,是吗?这就是我的意思。@Tsyvarev,是的,我列出了“orange”中的源文件foo.c和foo_bar.c。我能够修复我的目录错误,以便链接器可以在“orange”中找到源文件。然而,现在链接器正在抱怨找不到映射文件“pear.map”。“无法打开pear.map,没有这样的文件或目录”。我的CMakeLists.txt文件仍然缺少一些项目,我想。正如您所看到的,注释不适合多行错误消息:将该消息添加到问题帖子中(通过)。另外,请确保错误消息与您发布的代码(create).Tiago相对应,根据我当前的设置,将某些.c文件(橙色)链接到“pear”需要什么语法添加可执行文件(MAIN.c)查找库(ORANGE ORANGE\u foo.a)目标链接库(MAIN ORANGE)Tiago,根据我当前的设置,语法是什么