[CMake] CMake generated makefiles try to build a target that does
not exist (make[2]: *** No rule to make target ...)
Alan W. Irwin
irwin at beluga.phys.uvic.ca
Fri Oct 6 15:22:32 EDT 2006
On 2006-10-06 14:35-0400 Bill Tonkin wrote:
> The directory layout is:
>
>
> /users/wmt/cmake_system/
> |
> systems/my_one/
> | |
> | CMakeLists.txt [1]
> | main.C
> |
> libraries/my_a/
> | |
> | CMakeLists.txt [2]
> | my_a.C
> | my_a.h
> |
> |
> cmake_build/
> |
> systems/my_one/
> | |
> | CMakeCache.txt
> |
> libraries/my_a/
I haven't followed your error messages and results in detail, but I believe
what you are trying to do (only have CMakeLists.txt files in subdirectories
of the source tree and run cmake from a subdirectory of the build tree) is
the source of the problem, and there is a straightforward way to build your
projct using a top-level style approach where everything starts in the
top-level source tree and cmake is run from the top-level build tree.
Here is what you do to change to that "top-level" style (which works well
for me).
Create a top-level CMakeLists.txt file in
/users/wmt/cmake_system/ which contains the following:
project (my_one)
add_subdirectory(libraries/my_a)
add_subdirectory(systems/my_one)
The contents of libraries/my_a/CmakeLists.txt should continue to be
add_library (my_a my_a.C)
The contents of systems/my_one/CmakeLists.txt should be changed to
add_executable (my_one_exe main.C)
target_link_libraries (my_one_exe my_a)
Note, that last command refers to a target created in a different
subdirectory, but that is fine, target information is universal in CMake (so
long as the subdirectory that creates the target is processed before
subdirectories that refer to it as in the top-level CMakeLists.txt above.
Then completely clean out your old build tree since cmake and make create
everything there, and you don't want past bad attempts to confuse issues.
rm -rf /users/wmt/cmake_system/cmake_build
Then build your project from the top-level of the build tree.
mkdir /users/wmt/cmake_system/cmake_build
cd /users/wmt/cmake_system/cmake_build
cmake ../
make
Note how the cmake command refers specifically to the top-level directory
of the source tree where the top-level CMakeLists.txt file exists.
Hope this helps.
Alan
__________________________
Alan W. Irwin
Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).
Programming affiliations with the FreeEOS equation-of-state implementation
for stellar interiors (freeeos.sf.net); PLplot scientific plotting software
package (plplot.org); the Yorick front-end to PLplot (yplot.sf.net); the
Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project
(lbproject.sf.net).
__________________________
Linux-powered Science
__________________________
More information about the CMake
mailing list