cmake 排除main.cpp
时间: 2023-10-21 18:05:39 浏览: 143
在 CMakeLists.txt 文件中,可以使用以下代码将 main.cpp 排除在构建之外:
```
set(SOURCE_FILES
file1.cpp
file2.cpp
file3.cpp
)
# Exclude main.cpp from the source files
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
add_executable(my_program ${SOURCE_FILES})
```
此代码将所有源文件定义为 `SOURCE_FILES` 变量,并使用 `list(REMOVE_ITEM)` 命令从中移除 `main.cpp` 文件。最后,使用 `add_executable()` 命令将剩余的源文件编译为可执行文件 `my_program`。
相关问题
add_executable(EasyOCR main.cpp ocr.cpp)这里的 main.cpp 和 ocr.cpp 是我自己的代码程序吗
是的,这里的 `main.cpp` 和 `ocr.cpp` 是你自己编写的代码程序。`add_executable` 是 CMake 中用于构建可执行文件的命令,它的第一个参数是可执行文件的名称,后面的参数则是源文件的路径。在这个例子中,`EasyOCR` 是可执行文件的名称,`main.cpp` 和 `ocr.cpp` 是两个源文件的路径。你需要在这两个源文件中编写代码来实现你的程序功能。
现有如下cmake项目,根目录下包含一个include文件夹,内有header.h,根目录下还有src文件夹,内有文件main.cpp,header.cpp,两个文件均引用header.h,src文件夹以及项目根目录下均有cmakelists.txt,main.cpp中使用了在header.cpp中定义的函数,但是构建时出现undefined_reference
出现 undefined reference 的原因是链接器没有找到对应的函数实现。在你的项目中,需要将 header.cpp 编译成一个库文件(静态库或动态库),然后在链接时将该库文件链接到你的可执行文件中。
具体操作方法如下:
1. 在 header.cpp 中定义的函数前面加上 `extern "C"`,例如:
```c++
extern "C" {
void my_function() {
// function implementation
}
}
```
这样可以避免 C++ 名字修饰导致的链接错误。
2. 在根目录下的 CMakeLists.txt 中添加以下内容:
```cmake
# 编译 header.cpp 为一个静态库
add_library(mylib STATIC ${CMAKE_CURRENT_SOURCE_DIR}/header.cpp)
# 或编译为一个动态库
# add_library(mylib SHARED ${CMAKE_CURRENT_SOURCE_DIR}/header.cpp)
# 添加头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# 编译可执行文件
add_executable(myapp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
# 链接静态库
target_link_libraries(myapp mylib)
# 或链接动态库
# target_link_libraries(myapp mylib_shared)
```
这样就可以将 header.cpp 编译成一个库文件,并将其链接到可执行文件中,解决 undefined reference 的问题。
阅读全文