#c #cmake
#c #cmake
Вопрос:
Вопрос довольно прост, если у меня есть проект CMake со следующей структурой
sources/foo.cpp
sources/bar/foo.cpp
Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?
Комментарии:
1. «Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?» — Да, CMake гарантирует это. То есть, если бы вы столкнулись с какой-то проблемой в этой области, тогда вы могли бы заполнить bugreport для CMake, и они исправят проблему в 99% случаев (остальные 1% случаев относятся к «невозможно исправить»). Обратите внимание, что некоторые генераторы CMake создают смешные имена для объектных файлов, созданных из источников с «повторяющимися» именами. Но какими бы ни были имена объектных файлов, их привязка должна выполняться безупречно.
Ответ №1:
Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?
Cmake без проблем будет работать с двумя файлами с одинаковыми именами. Было бы довольно бесполезно, если бы это было не так.
Что касается «гарантий», из cmake licensing:
CMake распространяется по одобренной OSI лицензии BSD с 3 пунктами.
В конце лицензии BSD 3 и в cmake sources/copyright.txt вы можете прочитать:
ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ ПРАВООБЛАДАТЕЛЯМИ И УЧАСТНИКАМИ «КАК ЕСТЬ», И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, НЕ ПРИНИМАЮТСЯ. […]
Программное обеспечение бесплатное, и никаких гарантий нет.
Ответ №2:
Да, cmake обрабатывает это
Я создал 3 файла:
codeTest.h
codeTest.cpp
src/codeTest.cpp
определил функцию, которая печатает данные codeTest.cpp
в корневом каталоге, и определил функцию «main» в src/codeTest.cpp
и использовал функцию печати в «main», затем скомпилировал ее с помощью cmake
add_executable(codeTest src/codeTest.cpp codeTest.cpp)
и это сработало
codeTest.h
#ifndef CODETEST_H_
#define CODETEST_H_
#include<stdio.h>
void printTest();
#endif /* CODETEST_H_ */
codeTest.cpp
#include <../codeTest.h>
void printTest()
{
printf(" void printTest() n");
}
src/codeTest.cpp
#include <../codeTest.h>
int main()
{
printTest();
return 1;
}