我在cmake中使用clion 1.0并尝试构建简单的演示项目。但是cmake不希望将外部.c文件链接到main.c。
系统:Xubuntu 14.04
的main.c
#include "common/source_file.h"
void SetupRC()
{
Cmake_dermo(1);
}
int main(int argc, char* argv[])
{
SetupRC();
return 0;
}
的CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
project(mytest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(mytest common/source_file.h common/source_file.c ${SOURCE_FILES})
source_file.c
#include "source_file.h"
void Cmake_dermo(int da)
{
da += 1;
}
有什么问题?
答案 0 :(得分:1)
您在CMakeLists.txt文件中使用了错误的文件名。
更改CMakeLists.txt中的行:
set(SOURCE_FILES main.cpp)
为:
set(SOURCE_FILES main.c)
答案 1 :(得分:1)
我试过你CMakeList.txt
我得到了
在函数SetupRC()中: main.cpp :(。text + 0xa):对Cmake_dermo(int)的未定义引用
问题来自不同语言混合的事实:
要包含引用C的标题,请阅读this question。更正后的main.cpp文件如下所示:
extern "C"
{
#include "common/source_file.h"
}
void SetupRC()
{
Cmake_dermo(1);
}
int main(int argc, char* argv[])
{
SetupRC();
return 0;
}
头文件如下所示:
#ifndef SOURCE_FILE_H_ /* Include guard */
#define SOURCE_FILE_H_
void Cmake_dermo(int da);
#endif // SOURCE_FILE_H_
似乎Cmake在不对CMakeList.txt进行任何修改的情况下处理不同的语言。