gpt4 book ai didi

c - 正确设置cmakelist来编译项目

转载 作者:行者123 更新时间:2023-11-30 15:09:36 26 4
gpt4 key购买 nike

这是我的工作目录:

app
|___include
|___file1.h
|___file2.h
|___file3.h
!___ ...
|___src
|___file1.c
|___file2.c
|___file3.c
|___ ...
|__CMakeLists.txt
|__mainapp.c

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.5.1)
project(app)
include_directories(include)
file(GLOB SOURCES src/*.c)
add_executable(file3 src/file3.c)
target_link_libraries(file3 m ${SOURCES})

然后我执行以下操作:

$cmake .
$make

但我收到错误:

[ 50%] Building C object CMakeFiles/file3.dir/src/file3.c.o
[100%] Linking C executable file3
src/file3.c:1:19: fatal error: file1.h: File does not exist

其中 file3.c 只是:

#include "file1.h"
#include "file2.h"

int foo3(int a, int b){
return foo1(a,b) + foo2(a,b);
}

如何正确设置 CMakeLists?

最佳答案

您正在将源文件链接到可执行文件,但您应该编译它们。

target_link_libraries(file3 m ${SOURCES})

通常情况下,您将所有源文件放入 add_executable 中进行编译,并且仅将链接库(例如 m(用于数学函数的 libm))放入其中。

add_executable(file3 ${SOURCES})
target_link_libraries(file3 m)

这当然只有在其他文件都不包含 main 函数的情况下才有效。

您的 include_directories(include) 作为 -Iinclude 附加到 gcc 调用中,在编译期间使用。 https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html 。您可以使用 make VERBOSE=1 查看 gcc 调用。

在链接期间,gcc 不再查找那里,这就是为什么它告诉您它找不到该函数(之后它可能会在其他地方失败)

您还可以使用您的源代码构建一个库,并将可执行文件链接到该库。但不要将 file3 包含在库的源代码中。

关于c - 正确设置cmakelist来编译项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com