所以这是我的树目录:
*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 MAIN文件1.c文件2.c文件_libraryX.c文件_library Y.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)
当然,我最终会遇到一个错误,即它找不到文件file_libraryX.c和file_library y.c。
我到处都查过了,我似乎根本不明白如何包含来自不同目录的库(而不是头(,而不是当前目录的CMakeLists.txt。在我的情况下,是父目录。
另外,我之所以在树目录中没有更高级别的CMakeLists.txt,是因为我想在每个主文件夹中创建不同的二进制文件,而不必重写CMakeList.txt。它们碰巧共享公共库。
有人能帮帮我吗?
现代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)
common_folder/common_librayX/CMakeLists.txt
add_library(LIBX STATIC file_libraryX.c)
target_include_directories(LIBX PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
common_folder/common_librayY/CMakeLists.txt
add_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
common_folder/main1_folder/CMakeLists.txt
add_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)
建设项目:
mkdir build
cd build
cmake ..
cmake --build .