我第一次尝试使用cmake而且我很难让它工作。这里有一个源文件和一个库文件(分别为Lab_4.cpp
和Trip_4.cpp
),它们都在源文件夹(Lab_4
)中。到目前为止,我的cmake文件中包含了以下内容:
cmake_minimum_required (VERSION 2.6)
project (Lab_4)
#add executable
add_executable(Lab_4 ${PROJECT_SOURCE DIR}/Lab_4.cxx)
target_link_libraries (Lab_4 ${EXTRA_LISTS})
#add libraries
add_library (${PROJECT_SOURCE_DIR}/Trip.cxx)
ls显示两个文件都在该文件夹中。我对cmake真的很陌生,所以我确定我犯了一个明显的错误,但我不知道它是什么。任何帮助将不胜感激!
答案 0 :(得分:0)
要将源添加到CMake项目,可以使用aux_source_directory
命令。如果您的来源位于Lab_4
文件夹中,则可以执行以下操作:
project(Lab_4)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Lab_4 LAB4_SOURCES)
add_executable(Lab_4 ${LAB4_SOURCES})
CMAKE_CURRENT_SOURCE_DIR
是当前CMakeFiles.txt
所在目录的路径。上面的示例不会将Trip_4.cpp
构建为库,而是将其与Lab_4.cpp
一起用作另一个源文件。
如果您希望将Trip_4.cpp
构建为库拳头,我建议将其与Lab_4.cpp
分开,以便以后使用更轻松。示例目录结构可以是:
MyProject/
|-- app/
| |-- src/
| | `-- Lab_4.cpp
| |-- inc/
| `-- CMakeLists.txt
|-- lib/
| |-- src/
| | `-- Trip_4.cpp
| |-- inc/
| `-- CMakeLists.txt
`-- CMakeLists.txt
在这种情况下,MyProject/lib/CMakeLists.txt
将包含以下内容:
project(Trip_4)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src TRIP4_SOURCES)
add_library(Trip_4 ${TRIP4_SOURCES})
MyProject/app/CMakeLists.txt
几乎与我在第一个示例中显示的相同,但现在它必须保持对Trip_4
库的依赖:
project(Lab_4)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../lib
${CMAKE_CURRENT_SOURCE_DIR}/inc
)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src LAB4_SOURCES)
add_executable(Lab_4 ${LAB4_SOURCES})
add_dependencies(Lab_4 Trip_4)
target_link_libraries(Lab_4 Trip_4)
最后,MyProject/CMakeLists.txt
必须将库和可执行子项目绑定在一起,如下所示:
project(MyProject)
add_subdirectory(lib)
add_subdirectory(app)
答案 1 :(得分:0)
cmake_minimum_required(VERSION 2.6)
project(Lab_4)
add_library(Trip_4 Lab_4/Trip4.cpp)
add_executable(Lab_4 Lab_4/Lab_4.cpp)
target_link_libraries(Lab_4 Trip_4 ${EXTRA_LISTS})
您的确切意图并不完全清楚,但根据您当前的问题描述,以上是最简单的说明。
你绝对确定你的CMake是2.6版吗?您应该将版本更新为您当前使用的CMake(键入cmake --version
以查找)。