gpt4 book ai didi

c++ - cmake 简单的子目录不包括文件

转载 作者:搜寻专家 更新时间:2023-10-31 00:34:18 25 4
gpt4 key购买 nike

我已经阅读并尝试了几乎所有我能找到的教程/wiki/SO 帖子、页面、片段来让这个 CMAKE 工作....

我有一个 super 简单的目录结构:

ROOT/
|- CMakeLists.txt
|- main.cpp
|- sub/
|-CMakeLists.txt
|-subx/
|-CMakeLists.txt
|-subx.h
|-subx.cpp
|-suby/
|-CMakeLists.txt
|-suby.h
|-suby.cpp

main.cpp 是一个 super 简单的 cpp 程序:

//omitting all unnecessary code
int main() {
subx s;
s.defined_method();
s.another_defined_method(1);
return 0;
}

为了每个人的缘故,您可以假设 subx 和 suby 定义是正确的并且工作得很好,因为当我手动编译时它们确实如此。

当我使用 CMake 编译时,出现以下错误:

"/path/to/cmake" --build /path/to/Debug --target CS220_Project -- -j 4
Linking CXX executable simple_project
Undefined symbols for architecture x86_64:
"subx::defined_method()", referenced from:
_main in main.cpp.o
"subx::another_defined_method(int)", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [simple_project] Error 1
make[2]: *** [CMakeFiles/simple_project.dir/all] Error 2
make[1]: *** [CMakeFiles/simple_project.dir/rule] Error 2
make: *** [simple_project] Error 2

根 CMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 2.8.4)
project(simple_project)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

add_subdirectory(sub)

add_executable(simple_project ${SOURCE_FILES})

子 CMakeLists.txt 文件看起来:

add_subdirectory(subx)
add_subdirectory(suby)

subx & suby CMakeLists.txt 文件看起来:(包括他们各自的区别)

set(SUBX_SOURCES subx.cpp)

#Add any files in this directory
add_executable(SUBX ${SUBX_SOURCES})

我已经尝试过 add_library、file (glob) 等方法。我这辈子都无法获取任何子目录中的文件来使用 main.cpp 程序进行编译。

最佳答案

取决于您想要的子项目究竟是什么。按照我的理解,subxsuby 是库,应该链接到主要的可执行文件:

ROOT/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(simple_project)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

add_subdirectory(sub)

add_executable(simple_project ${SOURCE_FILES})
target_link_libraries(simple_project SUBX SUBY)

ROOT/subx/CMakeLists.txt

set(SUBX_SOURCES subx.cpp)

#Add any files in this directory
add_library(SUBX ${SUBX_SOURCES})

(suby 的 dtto)

关于c++ - cmake 简单的子目录不包括文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413580/

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