Tôi đang xây dựng ứng dụng C++ với CMake. Nhưng nó sử dụng một số tập tin nguồn trong C. Dưới đây là cấu trúc đơn giản:Liên kết các tệp C và CXX trong CMake
trunk/CMakeLists.txt:
project(myapp)
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -g -Wall")
add_subdirectory (src myapp)
trunk/src/main.cpp:
#include "smth/f.h"
int main() { f(); }
trunk/src/CMakeLists.txt:
add_subdirectory (smth)
link_directories (smth)
set(APP_SRC main)
add_executable (myapp ${APP_SRC})
target_link_libraries (myapp smth)
trunk/src/smth/fh:
#ifndef F_H
#define F_H
void f();
#endif
trunk/src/smth/fc:
#include "f.h"
void f() {}
trunk/src/smth/CMakeLists.txt
set (SMTH_SRC some_cpp_file1 some_cpp_file2 f)
add_library (smth STATIC ${SMTH_SRC})
Vấn đề là: i chạy gmake, nó biên dịch tất cả các tập tin và khi nó liên kết tất cả các libs với nhau, tôi nhận được:
undefined reference to `f()` in main.cpp
nếu tôi đổi tên fc thành f.cpp mọi thứ diễn ra tốt đẹp. Sự khác biệt và cách xử lý nó là gì?
Cảm ơn
Đọc tốt về điều này: 'Trộn C và C++:' http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html – Lazer