CMAKE:从父目录链接库

CMAKE:从父目录链接库,cmake,Cmake,这是我的目录树: *common_folder \ *main1_folder---CMakeLists.txt & file1.c & files2.c * *main2_folder * *common_librayX---file_libraryX.c (and header) * *common_libraryY--file_libraryY.c (and header) 所以我要做的是模拟下面这行: gcc-Wall-o主文件1.c文件2

这是我的目录树:

*common_folder
 \
  *main1_folder---CMakeLists.txt & file1.c & files2.c
  *
  *main2_folder
  *
  *common_librayX---file_libraryX.c (and header)
  *
  *common_libraryY--file_libraryY.c (and header)
所以我要做的是模拟下面这行: gcc-Wall-o主文件1.c文件2.c文件\u libraryX.c文件\u libraryY.c

下面是我如何尝试使用我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
#Déclaration du projet
project(MAIN1 VERSION 1.0)

#Include headers
get_filename_component(PARENT_DIR ../ ABSOLUTE)
include_directories(${PARENT_DIR}/commonlibrayX)
include_directories(${PARENT_DIR}/commonlibraryY)

add_executable(
    MAIN1
    file1.c
    file2.c
    file_libraryX.c
    file_libraryY.c
)

install (TARGETS Project DESTINATION bin)
当然,我最终的错误是它找不到文件\u libraryX.c和文件\u libraryy.c


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

另外,我没有在树目录中的更高级别使用CMakeLists.txt的原因是,我希望在每个主文件夹中创建不同的二进制文件,而不必重写CMakeLists.txt。他们碰巧共享公共图书馆


有人能帮我吗?

现代的CMake方法是:

common_文件夹/CMakeLists.txt
common\u文件夹/common\u库/CMakeLists.txt
common_folder/common_librayY/CMakeLists.txt
common\u folder/main1\u folder/CMakeLists.txt
建设项目:

mkdir build
cd build
cmake ..
cmake --build .

现代CMake方法将是:

common_文件夹/CMakeLists.txt
common\u文件夹/common\u库/CMakeLists.txt
common_folder/common_librayY/CMakeLists.txt
common\u folder/main1\u folder/CMakeLists.txt
建设项目:

mkdir build
cd build
cmake ..
cmake --build .

“如何包含来自不同目录的库(而不是标题),而不是当前目录的CMakeLists.txt。”-只需在
add\u executable
命令中指定库文件的绝对路径:
${PARENT\u DIR}/commonlibrayX/file\u libraryX.c
${PARENT\u DIR}/CommonLibrary/file\u library.c
。非常感谢您的帮助!我原以为我需要做一些更复杂的事情,比如在每个文件夹中编写CMakeLists.txt,但我尝试了却没有成功。你知道怎么做吗?“如何包含来自不同目录的库(而不是标题),而不是当前的CMakeLists.txt。”-只需在
add_executable
命令中指定库文件的绝对路径:
${PARENT_DIR}/commonlibrayX/file_libraryX.c
${PARENT_DIR}/CommonLibrary/file\u library.c
。非常感谢您的帮助!我原以为我需要做一些更复杂的事情,比如在每个文件夹中编写CMakeLists.txt,但我尝试了却没有成功。你知道怎么做吗?
add_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)
mkdir build
cd build
cmake ..
cmake --build .