如何使用CMake将我的.h和.c文件链接到同一个项目但不同的目录中

时间:2017-05-02 01:34:19

标签: eclipse gcc cmake

我目前正在Eclipse中使用嵌入式C项目,交叉编译为M4 Cortex目标。该项目将创建3个独立的可执行文件:apple.hex,orange.hex和pear.hex。 " apple"源目录编译,构建和链接,不依赖于" orange"或"梨"。 "橙"源目录还可以编译,构建和链接,没有任何依赖关系。

然而,"梨"需要从" orange"访问许多.h和.c资产。我有很多尝试让我的CMakeLists.txt到#34;找到"和"链接"来自" orange"的代码到#梨;"但无济于事。

这是我当前的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)我是否需要单独创建一个橙色的静态库才能在梨中访问它?

2)如果我不需要创建一个静态库来访问梨的橙色,我该如何将橙色链接到梨?

3)我无法找到CMake放置目标文件的位置。他们在哪儿?

这个项目都在一个makefile下。

非常感谢任何帮助,谢谢!

我能够解决目录问题,以便将$ {MY_APP_DIR}中的所有包含目录链接到" Pear"。但是,出现了一些新问题。链接器找不到创建可执行映像所需的映射文件:

的/ usr /本地/ Caskroom / GCC-臂嵌入/ 5_4-2016q3,20160926 / GCC-臂-NONE-EABI-5_4-2016q3 / bin中/../ LIB / GCC /臂-无 - eabi / 5.4.1 /../../../../ arm-none-eabi / bin / ld:无法打开地图文件/Users/admin/Github/target/apps/pear/pear.map:No这样的文件或目录。

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

1 个答案:

答案 0 :(得分:0)

我会尽力回答你的问题 您没有将库链接到目标。
你需要这样的东西:
$ target_link_libraries(yourtarget yourlibraries)
在你的add_executable命令之后。

3)我无法找到CMake放置目标文件的位置。他们在哪?
默认情况下,CMake将其所有输出放在构建树中,因此除非您在cmake文件中使用$ {CMAKE_SOURCE_DIR}或$ {CMAKE_CURRENT_SOURCE_DIR},否则您应该在CMakeLists.txt文件所在的文件夹中找到输出文件。