CMAKE:从父目录链接库

4 cmake

这是我的树目录:

\n\n
*common_folder\n \\\n  *main1_folder---CMakeLists.txt & file1.c & files2.c\n  *\n  *main2_folder\n  *\n  *common_librayX---file_libraryX.c (and header)\n  *\n  *common_libraryY--file_libraryY.c (and header)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我想做的是模拟以下行:\ngcc -Wall -o MAIN file1.c file2.c file_libraryX.c file_libraryY.c

\n\n

这是我尝试使用 CMakeLists.txt 的方法:

\n\n
cmake_minimum_required(VERSION 3.0.0)\n#D\xc3\xa9claration du projet\nproject(MAIN1 VERSION 1.0)\n\n#Include headers\nget_filename_component(PARENT_DIR ../ ABSOLUTE)\ninclude_directories(${PARENT_DIR}/commonlibrayX)\ninclude_directories(${PARENT_DIR}/commonlibraryY)\n\nadd_executable(\n    MAIN1\n    file1.c\n    file2.c\n    file_libraryX.c\n    file_libraryY.c\n)\n\ninstall (TARGETS Project DESTINATION bin)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,我最终得到的错误是找不到文件 file_libraryX.c 和 file_libraryy.c。

\n\n

我到处都查过了,我似乎根本不明白如何包含来自与当前 CMakeLists.txt 不同目录的库(而不是标头)。在我的例子中是父目录。

\n\n

另外,我在树目录中没有将 CMakeLists.txt 放在更高级别的原因是因为我想在每个主文件夹中创建不同的二进制文件,而不必重写 CMakeLists.txt。他们碰巧共享公共库。

\n\n

有人可以帮我吗?

\n

ser*_*gej 6

现代 CMake 方法是:

common_folder/CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(MAIN1 VERSION 1.0)
add_subdirectory(common_librayX)
add_subdirectory(common_librayY)
add_subdirectory(main1_folder)
Run Code Online (Sandbox Code Playgroud)

common_folder/common_librayX/CMakeLists.txt

add_library(LIBX STATIC file_libraryX.c)
target_include_directories(LIBX PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

common_folder/common_librayY/CMakeLists.txt

add_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

common_folder/main1_folder/CMakeLists.txt

add_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)
Run Code Online (Sandbox Code Playgroud)

构建项目:

mkdir build
cd build
cmake ..
cmake --build .
Run Code Online (Sandbox Code Playgroud)